apply-templates で xsl:sort を使用して要素を並べ替えましたが、それらにも番号を付けたいのですが、xsl:number を使用しようとすると、並べ替え後の位置ではなく、元の位置が表示されます。変数は変更できないので、変数も使用できないと思いますか?では、リストに正しく番号を付けるにはどうすればよいでしょうか?
6144 次
2 に答える
1
OPのコメントから:
ああ、うまくいきました!ありがとうございました!私は for-each ループを使用していませんでしたが、
<xsl:apply-templates select="book">
代わりに使用していました。しかし、 for-each では機能します
--not を使用した 2 つの例を<xsl:apply-templates>
次に示し<xsl:for-each>
ます。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<xsl:apply-templates>
<xsl:sort select=". mod 3"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="num">
<xsl:text>
</xsl:text>
<xsl:value-of select="position()"/>: <xsl:text/>
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
この変換が次の XML ドキュメントに適用される場合:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
要素の番号付きリストを生成し、3 で割った余りでソートします。
1: <num>03</num>
2: <num>06</num>
3: <num>09</num>
4: <num>01</num>
5: <num>04</num>
6: <num>07</num>
7: <num>10</num>
8: <num>02</num>
9: <num>05</num>
10: <num>08</num>
2 番目の例は、XSLT 1.0 で広く使用されているプログラミング イディオムです。
<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="/*">
<numsMax>
<xsl:apply-templates>
<xsl:sort data-type="number" order="descending"/>
</xsl:apply-templates>
</numsMax>
</xsl:template>
<xsl:template match="num">
<xsl:if test="position()=1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
この変換が次の XML ドキュメントに適用される場合:
<nums>
<num>07</num>
<num>10</num>
<num>05</num>
<num>02</num>
<num>03</num>
<num>08</num>
<num>04</num>
<num>01</num>
<num>06</num>
<num>09</num>
</nums>
position()=1
ソートされたノードリストを使用して、すべての数値の最大値を生成します。
<numsMax>
<num>10</num>
</numsMax>
于 2011-03-06T16:12:29.743 に答える
1
を使用<xsl:value-of select="position()" />
して、ループ内の現在の位置を取得できます。
xpath 仕様から: position 関数は、式評価 context からのコンテキスト位置に等しい数値を返します。
XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<library>
<book><name>abc</name></book>
<book><name>def</name></book>
<book><name>aaa</name></book>
</library>
XSLT (test.xsl):
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="/library/book">
<xsl:sort select="name" data-type="text" />
<xsl:value-of select="position()" />: <xsl:value-of select="name" />,
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
于 2011-03-05T23:26:59.090 に答える