jojo123: XSLT - Aufruf anhand Anzahl von gewissen Nodes

Hi,

ich geh mal ganz praktisch an die Fragestellung ran...

XML (snippet):

  
<Intranet>  
  <Stadt1>  
    <Stadtname>Stadt_1  
    </Stadtname>  
    <Burgermeister>Burgermeister_1  
    </Burgermeister>  
  </Stadt1>  
  <Stadt2>  
    <Stadtname>Stadt_2  
    </Stadtname>  
    <Burgermeister>Burgermeister_2  
    </Burgermeister>  
  </Stadt2>  
...  
</Intranet>  

XSLT (snippet):

  
<xsl:for-each select="Intranet/Stadt1">  
<xsl:value-of select="Stadtname"/>  
<xsl:value-of select="Burgermeister"/>  
<xsl:for-each select="Intranet/Stadt2">  
<xsl:value-of select="Stadtname"/>  
<xsl:value-of select="Burgermeister"/>  

Nun möchte ich die jew. Einträge aus "Stadtname" & "Burgermeister" aufzählen lassen ohne immer "for-each" mit der jew. Stadt aufzuzählen.
Im Grund genommen, ist dies ja kein Problem, doch ich möchte gerne eine Schleife verwenden, da die Anzahl der Städte variiert und ich den XSLT code so gering wie möglich halten möchte.

Das einzigste was ich nun gefunden habe, ist wie eine Anzahl gewisser Nodes ermitteln kann:
<xsl:value-of select="count(//Stadtname)"/>

Praktisch funktioniert die Zählung der Städte, aber ist eine unsaubere Art zu zählen meiner meinung nach.

Weiß jemand wie solch eine Schleife erstellen kann?

LG

  1. Hallo,

    eine Variante mit entsprechenden XPATH Funktionen fuer local-name() und substring

    /Intranet/*[substring(local-name(),1,5)='Stadt']

    Gruss, Frank

    1. /Intranet/*[substring(local-name(),1,5)='Stadt']

      Hi, vielen Dank für die Antwort.
      Klar, diese Variante mit dem Teilstring funktioniert wunderbar.

      Aber gibt es nicht eine Funktion oder ein Zeichen/Symbol mit dem alle Kind-Elemente erfasst werden?

      1. Aber gibt es nicht eine Funktion oder ein Zeichen/Symbol mit dem alle Kind-Elemente erfasst werden?

        Ja,

        *

        also, z.b. /Intranet/*

        1. Aber gibt es nicht eine Funktion oder ein Zeichen/Symbol mit dem alle Kind-Elemente erfasst werden?

          Ja,

          *

          also, z.b. /Intranet/*

          war ja klar :)

          nun meine letzte kleine anschlussfrage:
          wie bekomme ich nun den namen bzw wert des node in welchen man sich gerade befindet?

          1. hi,

            den Knotennamen: name() oder local-name() und den Textinhalt des aktuellen Knoten mit ./text().

            "." (punkt) ist die relative referenz auf den aktuellen Knoten, kann man aber auch weglassen.

            ./Buergermeister[1]/text()  gibt dir dann den Wert des ersten (1.) Knotens mit dem Namen "Buergermeister" innerhalb des aktuellen Knotens "Stadt232".

            folgende XPath Ausdruecke sind aquivalent

            ./Buergermeister[1]/text()
            Buergermeister[1]/text()

            Cheers, Frank