使用:
count(preceding::book) +1
book
ただし、ネストされた要素を持つことができる場合、使用する正しい式は次のようになることに注意してください。
count(ancestor::book | preceding::book) +1
または、次を使用できます。<xsl:number>
完全なコード:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="book">
<xsl:value-of select=
"concat('book ', ., ' = ', count(preceding::book) +1, '
')"/>
</xsl:template>
</xsl:stylesheet>
この変換が提供された XML ドキュメントに適用されると、次のようになります。
<books>
<cat>
<book>a</book>
<book>b</book>
</cat>
<cat>
<book>c</book>
<book>d</book>
<book>e</book>
</cat>
</books>
必要な正しい結果が生成されます。
book a = 1
book b = 2
book c = 3
book d = 4
book e = 5
Ⅱ.使用<xsl:number>
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="book">
<xsl:value-of select="concat('
book ', ., ' = ')"/>
<xsl:number level="any" count="book"/>
</xsl:template>
</xsl:stylesheet>
III. position()
適切な使用<xsl:apply-templates>
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="/*/*/book"/>
</xsl:template>
<xsl:template match="book">
<xsl:value-of select="concat('
book ', ., ' = ', position())"/>
</xsl:template>
</xsl:stylesheet>
説明:
の値は、実行のためにこのテンプレートを選択する原因となった でposition()
作成されたノード リスト内の現在のノードの位置です。<xsl:apply-templates>
適切なものを使用すれば、使用<xsl:apply-templates>
してposition()
も問題ありません。