Knoten zählen
DietmarL
- xsl
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>
Hallo,
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?
-----------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:key name="beleg" match="beleg" use="@belegart" />
<xsl:template match="/data">
<data>
<xsl:apply-templates />
</data>
</xsl:template>
<xsl:template match="rechnung">
<rechnung>
<xsl:apply-templates />
</rechnung>
</xsl:template>
<xsl:template match="beleg">
<xsl:variable name="this" select="." />
<xsl:for-each select="key('beleg', @belegart)">
<xsl:if test="generate-id(.) = generate-id($this)">
<item name="nummer">
<text>
<xsl:value-of select="position()" />
</text>
</item>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
----------
Grüße
Thomas