我对节点的编号有疑问。我想稍后重新使用分配给节点的数字。我将通过一个例子展示我的意思。
xml代码:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="cookbook.xsl"?>
<cookbook>
<recipe>
<name>Waffles</name>
<category>Breakfast</category>
<description>Make the waffles</description>
</recipe>
<recipe>
<name>Spaghetti</name>
<category>Diner</category>
<description>Make the spaghetti</description>
</recipe>
<recipe>
<name>Pancakes</name>
<category>Breakfast</category>
<description>Make the pancakes</description>
</recipe>
</cookbook>
输出:
1 Waffles
Make the waffles
2 Spaghetti
Make the spaghetti
3 Pancakes
Make the pancakes
使用xsl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<xsl:for-each select="cookbook/recipe">
<xsl:variable name="number">
<xsl:number level="any" count="recipe" value="position()"/>
</xsl:variable>
<xsl:value-of select="$number"/>
<xsl:value-of select="name"/>
<xsl:for-each select="description">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:for-each>
稍后我想只显示recipenames和与之对应的数字。
输出:
Breakfast
Waffles (1)
Pancakes (3)
Diner
Spaghetti (2)
的xsl:
<xsl:for-each select="//category[not(preceding::category=.)]">
<xsl:sort select="." />
<xsl:value-of select="." />
<xsl:variable name="categoryname">
<xsl:value-of select="." />
</xsl:variable>
<xsl:for-each select="//category[$categoryname=.]/..">
<a class="index" href="#{generate-id(name)}">
<xsl:value-of select="name" />
<xsl:text> (</xsl:text>
<!--I would like to show the number right here-->
<xsl:text>)</xsl:text>
</a>
</xsl:for-each>
在后一个示例中,数字不再是计数器,而是属于每个recipename的固定数字。 由于我刚接触xslt,我不知道如何寻找答案。也许使用xsl:number在这里做的不对。我已经尝试了很多,但我仍然无法掌握这个问题。
我会非常感谢正确方向的暗示。提前谢谢。
答案 0 :(得分:1)
尝试:
<xsl:value-of select="count(preceding-sibling::recipe)+1" />
顺便说一句,你应该通常阅读关键字和使用Muenchian方法进行分组。