我在应用模板中对xsl:sort进行了排序来对元素进行排序,我想让它们也编号,但是如果我尝试使用xsl:number,那么它只是给出原始位置,而不是排序后的那个。我猜变量不能被使用,因为它们不能被改变?那么我怎样才能正确地为我的列表编号?如何在XSLT中对已排序的列表进行编号
回答
您可以使用<xsl:value-of select="position()" />
来获取循环中的当前位置。
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>
哦,那工作!谢谢!我没有使用for-each循环,而是使用
@ user646448:它应该与两者“工作”。 – 2011-03-06 15:59:18
+1正确答案。 – 2011-03-06 16:00:19
从OP的评论:
哦,成功了!谢谢!我不是使用for-each循环的 ,而是使用
<xsl:apply-templates select="book">
代替。但随着-每次工作
这里有两个例子,使用<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>
它产生一个编号的列表列表NTS,当除以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>
第二个例子是在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>
- 1. 如何在groovy中对排序列表进行排序
- 2. 对已排序的链接列表进行排序
- 3. 如何对2D列表进行排序?
- 4. CompareTo如何对列表进行排序?
- 5. 如何对此列表进行排序?
- 6. 如何对列表进行排序?
- 7. 如何对列表进行排序?
- 8. 如何对IEnumerable列表进行排序?
- 9. 用Jade对编号列表进行排序
- 10. 在Erlang中对列表进行排序
- 11. 在Groovy中对列表进行排序
- 12. 在Prolog中对列表进行排序
- 13. 在C中对列表进行排序#
- 14. 在类中对列表进行排序
- 15. 如何对列表中的列表进行排序?
- 16. 如何在Python中对dict中的列表进行排序?
- 17. 如何在jquery中对表中的单个列进行排序
- 18. 如何在Android中对阵列列表hashmap进行排序?
- 19. 对Prolog中的列表进行排序
- 20. 如何按最高编号对字符串列表进行排序
- 21. 如何在rails上对ruby中的值列表进行排序?
- 22. 如何获得列表中的前10个已排序项目,而不对整个列表进行排序
- 23. 如何对JSP中的对象列表进行排序
- 24. 如何对列表框中的项目进行升序排序
- 25. 如何按用户编号对用户的ArrayList进行排序
- 26. 将已排序的列表编号与第一行的内容对齐
- 27. 如何对具有软件版本号的表格中的列进行排序?
- 28. 如何在java列表中对列表中的地图进行排序
- 29. 如何在列表框中对项目进行排序
- 30. 如何在Jinja2中对列表进行排序?
问得好,+1。使用''(不使用''),查看我的答案,以获得编排排序节点列表的两个完整,简短和简单的示例。 :) –
2011-03-06 16:14:11