Ich habe eine XML wie folgt aus:Conditional Autoinkrement in xsl
<V>
<W>
<X>1</X>
</W>
<W>
<Y>1</Y>
</W>
<W>
<X>1555</X>
</W>
<W>
<X>1</X>
</W>
</V>
Ich möchte es so etwas wie machen:
<entity ID="start">
<f ID="NewField">0001</f>
<f ID="NewField">0001</f>
<f ID="NewField">0002</f>
<f ID="NewField">0003</f>
</entity>
Wenn das Feld V/W/X dann NewField
sollte um 1 erhöht werden, so oft das Tag V/W/X gefunden wird. Ähnlich für V/W/Y.
Die XSL, die ich verwende ist
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<entity ID="start">
<xsl:for-each select="V/W">
<xsl:if test="X">
<xsl:variable name="my_var">
<xsl:value-of select="concat('000',position())"/>
</xsl:variable>
<f ID="NewField"><xsl:value-of select="$my_var"/></f>
</xsl:if>
<xsl:if test="Y">
<xsl:variable name="my_var">
<xsl:value-of select="concat('000',position())"/>
</xsl:variable>
<f ID="NewField"><xsl:value-of select="$my_var"/></f>
</xsl:if>
</xsl:for-each>
</entity>
</xsl:template>
</xsl:stylesheet>
aber es gibt mir ein falsches Ergebnis, so etwas wie dieses:
<entity ID="start">
<f ID="NewField">0001</f>
<f ID="NewField">0002</f>
<f ID="NewField">0003</f>
<f ID="NewField">0004</f>
</entity>
Aus Neugier, ist es ein besonderer Grund, warum Sie die Verwendung ' parent :: 'achse explizit (die definitionsgemäß immer nur höchstens einen Knoten hat) anstatt' ..' - es scheint, dass es in beiden Richtungen ziemlich eindeutig ist. –
Sie haben Recht, ".." ist das gleiche, und ich weiß das. Ich mache es, weil es für mich expressiver ist. Beim Lesen des XPath ist die erwartete Dokumentenstruktur sofort klar, während ".." einen Rest der Mehrdeutigkeit hinterlässt. – Tomalak