Sven Petri: XSL bestimmten Knotenbereich bestimmen

Beitrag lesen

Hallo,

ich möchte mithilfe von XSL nur eine bestimmte Anzahl von Werten aus meinem XML ausgeben.

Die Knoten des XML befinden sich alle auf einer Ebene und ich muss quasi den Start und den Endpunkt im XSL bestimmen. Leider gelingt mir das nicht.

Ich poste mal mein XML und das dazugehörige XSL in der Hoffnung jemand kann mir auf die Sprünge helfen.

Ich möchte die Werte von node1 als Überschriften ausgeben und die Werte zwischen den jeweiligen node1 Knoten als Unterpunkte. Leider liegen sie auf einer Ebene und ich finde keine Möglichkeit mithilfe von XPath die auszugebenden Knoten auf einen Bereich zwischen zwei Knoten zu beschränken. xsl:preceding-sibling und xsl:following-sibling geben jeweils alle vor/dahinter liegenden Knoten an.

Wie wäre ein einfaches "von node1 bis node1" in XPath, bzw. XSL möglich?

<main>
  <node1>
    <label>Test1</label>
    <position>1.1</position>
  </node1>
  <node1>
    <label>Test2</label>
    <position>1.2</position>
  </node1>
  <node2>
    <nodelabel>Test3</nodelabel>
    <position>1.2.1</position>
  </node2>
  <node3>
    <nodelabel>Test4</nodelabel>
    <position>1.2.1.1</position>
  </node3>
  <node1>
    <nodelabel>Test5</nodelabel>
    <position>1.3</position>
  </node1>
<!-- usw.-->
</main>

Folgendes XSL-Template soll diesen XML-Baum verarbeiten:

<xsl:template name="node">

<xsl:for-each select="*[string-length(position)=3]">

<!-- Die Überschrift wird anders formatiert-->
   <xsl:value-of select="nodelabel"/>
   <!-- Ende Überschrift-->

<!-- Ein kleines Beispiel von vielen gescheiterten versuchen-->

<xsl:for-each select="following-sibling::node()">

<!-- Hier sollen die dazwischenliegenden Einträge ausgegeben werden-->
     <xsl:value-of select="nodelabel"/>
     <!-- Ende der Einträge-->

</xsl:for-each>

<!-- Ende schlechtes Beispiel-->

</xsl:for-each>
</xsl:template>