稍后使用xsl:number作为固定数字

时间:2013-12-28 07:54:36

标签: xml xslt numbers xlrd

我对节点的编号有疑问。我想稍后重新使用分配给节点的数字。我将通过一个例子展示我的意思。

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在这里做的不对。我已经尝试了很多,但我仍然无法掌握这个问题。

我会非常感谢正确方向的暗示。提前谢谢。

1 个答案:

答案 0 :(得分:1)

尝试:

<xsl:value-of select="count(preceding-sibling::recipe)+1" />
顺便说一句,你应该通常阅读关键字和使用Muenchian方法进行分组。