DietmarL: Knoten zählen

Beitrag lesen

Hallo, bitte um Hilfe bei folgendem Problem.

Ich habe die Anforderung, Childtags (beleg) für jedes Attribut (belegart) übergreifend über die Parenttags (rechnung) mit einer laufenden Nummer zu versehen. innerhalb der Tags <rechnung> geht das wunderbar mit folgendem xsl, aber wie geht's ausserhalb?

auszug aus ausgangs-xml:
<rechnung>
 <kundennummer>012345</kundennummer>
 <beleg belegart="NA">
  <text>shampoo</text>
 </beleg>
 <beleg belegart="A">
  <text>zahnseide</text>
 </beleg>
</rechnung>
<rechnung>
 <kundennummer>023456</kundennummer>
 <beleg belegart="A">
  <text>sonnencreme</text>
 </beleg>
 <beleg belegart="A">
  <text>handtuch</text>
 </beleg>
</rechnung>

auszug aus xsl-File:
<xsl:for-each select="rechnung">
<xsl:for-each select="beleg">
<xsl:element name="item">
<xsl:attribute name="name">nummer</xsl:attribute>
<text>
xsl:choose
<xsl:when test="@belegart='A'">
<xsl:variable name="BelegIndexA"><xsl:number level="single" format="1" count="beleg[@belegart='A']"/></xsl:variable>
<xsl:value-of select='number($BelegIndexA)-1'/>
</xsl:when>
<xsl:when test="@belegart='NA'">
<xsl:variable name="BelegIndexNA"><xsl:number level="single" format="1" count="beleg[@belegart='NA']"/></xsl:variable>
<xsl:value-of select='number($BelegIndexNA)-1'/>
</xsl:when>
<xsl:when test="@belegart='N'">
<xsl:variable name="BelegIndexN"><xsl:number level="single" format="1" count="beleg[@belegart='N']"/></xsl:variable>
<xsl:value-of select='number($BelegIndexN)-1'/>
</xsl:when>
</xsl:choose>
</text>
</xsl:for-each>
</xsl:for-each>

auszug aus ziel-xml:
<rechnung>
 <kundennummer>012345</kundennummer>
 <beleg belegart="NA">
  <item name="nummer"><text>0</text></item>
  <text>shampoo</text>
 </beleg>
 <beleg belegart="A">
  <item name="nummer"><text>0</text></item>
  <text>zahnseide</text>
 </beleg>
</rechnung>
<rechnung>
 <kundennummer>023456</kundennummer>
 <beleg belegart="A">
  <item name="nummer"><text>1</text></item>
  <text>sonnencreme</text>
 </beleg>
 <beleg belegart="A">
  <item name="nummer"><text>2</text></item>
  <text>handtuch</text>
 </beleg>
</rechnung>