phips: Wenn Tag gleichen inhalt hat wie auf den nächsten position...

Hi,

ich muss eine xml mit xslt umwandel um sie mit Indesign (ein DTP- oder Layoutprogramm im Printbereich) layouten zu können.
nun ergibt sich folgendes Problem, jedes Hotel hat die Strucktur wie unten, das heißt jedes Hotel hat die Angabe land, region und ort. Der "Kunde" wünscht aber eine Art Balken über jedem Land mit dem Landesnamen.
Dies kommt so nicht in der xml vor.

Das heißt ich brauche eine Regel die sich irgendwie folgenden zweck beinhalten soll.

Wenn der Tag <land> den gleichen Inhalt wie Tag <land> auf der nächsten Position zeig nur Tag auf vorheriger Position.

Ich habe "Kunde" ich "" gesetzt, weil der Kunde mein Chef ist und ich, als Azubi mich in die Geschichte rein denken soll.

Ich versuche mich seit gestern Morgen in XSLT rein zudenken, bin also absoluter anfänger, aber hier hört es echt hauf! Kann mir einer helfen?
Ich wäre über aus dankbar!

  
<Root>  
  
<hotel>  
 <navigation>  
  <hotelname>Vistaflor</hotelname>  
  <ort sehenswert="+++">  
   <land>Spanien</land>  
   <region>Gran Canaria</region>  
   <wohnort>Campo de Golf (Maspalomas)</wohnort>  
  </ort>  
 </navigation>  
 <beschreibung>  
<ausstattung> Lage: </ausstattung>  
Die Bungalowanlage liegt ca. 2 km vom Ferienzentrum Playa del Inglés entfernt. Den Sandstrand erreichen Sie nach etwa 2,7 km (kostenfreier Bus-Service zum Strand, 2 x vormittags hin und 2 x nachmittags zurück). Linienbus-Haltestelle und Einkaufsmöglichkeiten in der Nähe.<!-- &#x2028; -->  
<ausstattung>Ausstattung: </ausstattung>  
Die Anlage besteht aus 216 Wohneinheiten, Rezeption mit Mietsafes, Internet-Zugang an der Rezeption (gegen Gebühr), Bar, Buffet-Restaurant, A-la-carte-Restaurant und Minimarkt. In der Außenanlage ein Swimmingpool mit separatem Kinderbecken, Sonnenterrasse mit Liegen nach Verfügbarkeit, Schirme gegen Gebühr, Poolbar sowie kleiner Kinderspielplatz.<!-- &#x2028; -->  
<ausstattung>Verpflegung: </ausstattung>  
Frühstücksbuffet. HP mit 5-Gänge Abendmenü.<!-- &#x2028; -->  
<ausstattung>Zimmer: </ausstattung>  
Diese sind zweckmäßig eingerichtet mit Wohnraum (Schlafmöglichkeit für 1 Erwachsenen oder 2 Kinder), im 1. Stock offenes Schlafzimmer, Bad oder Dusche, WC, Telefon, Münz-Sat.-TV, Kitchenette mit Kühlschrank, kleiner Balkon und Terrasse. Auch zur Alleinbenutzung (1A) oder alsSpartipp-Bungalow Typ B1 (H13222D 2S) buchbar.<!-- &#x2028; -->  
<rezi>»der beste urlaub useres lebens«</rezi>  
 </beschreibung>  
 <service>  
  <anreisepic>!)</anreisepic>  
  <hotelservicepic>Qf"|</hotelservicepic>  
  <sportpic angebot="+">Y]porïòóõ</sportpic>  
 </service>  
 <sterne>+++</sterne>  
 <preise>  
  <summe>ab 417,- €</summe>  
  <hinweis>pro Person</hinweis>  
 </preise>  
</hotel>  
</Root>  

danke schon mal!

gruß

phips

  1. Wenn der Tag <land> den gleichen Inhalt wie Tag <land> auf der nächsten Position zeig nur Tag auf vorheriger Position.

    Also wenn du eine Schleife über die Hotels machst kannst du dir innerhalb der Schleife doch einfach das Land in einer Variablen merken. Entspricht der Wert in der Variablen Land dem Wert im Element Land des aktuellen Hotel Objekts dann gibt Land nicht aus da es das selbe Land ist. Ist Land in der Variablen unterschiedlich zum Land im Element dann gibt Land aus und merke dir den Wert des Elements Land in der Variablen. Und weiter in der Schleife.

    1. Hallo,

      Also wenn du eine Schleife über die Hotels machst kannst du dir innerhalb der Schleife doch einfach das Land in einer Variablen merken. [...] Und weiter in der Schleife.

      Wenn er das macht, würde ich schon gerne zusehen, denn es gibt noch immer keine Schleifen in XSLT!

      Grüße
      Thomas

  2. Hallo,

    ich muss eine xml mit xslt umwandel um sie mit Indesign (ein DTP- oder Layoutprogramm im Printbereich) layouten zu können.
    nun ergibt sich folgendes Problem, jedes Hotel hat die Strucktur wie unten, das heißt jedes Hotel hat die Angabe land, region und ort. Der "Kunde" wünscht aber eine Art Balken über jedem Land mit dem Landesnamen.
    Dies kommt so nicht in der xml vor.

    Das heißt ich brauche eine Regel die sich irgendwie folgenden zweck beinhalten soll.

    Wenn der Tag <land> den gleichen Inhalt wie Tag <land> auf der nächsten Position zeig nur Tag auf vorheriger Position.

    Was du also brauchst ist eine Gruppierung nach Land.
    Falls du XSLT 1.0 verwendest kannst du das mit key() schaffen.

      
    <xsl:key name="land" match="hotel" use="navigation/ort/land"/>  
     <xsl:template match="/Root">  
      <xsl:for-each select="hotel[generate-id(.) = generate-id(key('land', ./navigation/ort/land)[1])]">  
       <xsl:sort select="navigation/ort/land"/>  
       <xsl:value-of select="navigation/ort/land"/>  
       <xsl:for-each select="key('land', navigation/ort/land)">  
        <xsl:sort select="navigation/hotelname" order="descending"/>  
        <xsl:value-of select="navigation/hotelname"/>  
       </xsl:for-each>  
      </xsl:for-each>  
     </xsl:template>  
      
    
    

    Liefert dir eine Liste von Ländern und zu jedem Land die dazugehörigen Hotels.

    Wenn dich - hoffentlich - Erklärungen interessieren:
    http://suche.de.selfhtml.org/cgi-bin/such.pl?suchausdruck="Thomas+J.S."+xsl+key(&lang=on&feld=alle&index_4=on&index_5=on&index_6=on&hits=alle

    Grüße
    Thomas