XSL increment template parameter
输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <root> <trip> <ID>3295</ID> <ordini> <NR>821321</NR> <!-- some info --> </ordini> <ordini> <NR>234</NR> <!-- some info --> </ordini> </trip> <trip> <ID>23</ID> <ordini> <NR>2321</NR> <!-- some info --> </ordini> <ordini> <NR>999</NR> <!-- some info --> </ordini> <ordini> <NR>232132131</NR> <!-- some info --> </ordini> </trip> </root> |
XSL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" /> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template name="set-row"> <xsl:param name="runningtot"/> <xsl:param name="node"/> <xsl:value-of select="$runningtot + 1"/> <xsl:if test="$node/following-sibling::ordini"> <xsl:call-template name="set-row"> <xsl:with-param name="runningtot" select="$runningtot + 1"/> <xsl:with-param name="node" select="$node/following-sibling::ordini[1]"/> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template match="ordini"> <xsl:for-each select="//ordini"> <ordini> <NR> <xsl:call-template name="set-row"> <xsl:with-param name="runningtot" select="0"/> <xsl:with-param name="node" select="ordini"/> </xsl:call-template> </NR> <xsl:apply-templates/> </ordini> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
期望的输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <root> <trip> <ID>3295</ID> <ordini> <NR>1</NR> <!-- some info --> </ordini> <ordini> <NR>2</NR> <!-- some info --> </ordini> </trip> <trip> <ID>23</ID> <ordini> <NR>1</NR> <!-- some info --> </ordini> <ordini> <NR>2</NR> <!-- some info --> </ordini> <ordini> <NR>3</NR> <!-- some info --> </ordini> </trip> </root> |
基本上,我希望每个"ordini"标签都替换"NR"标签,我从 1 开始计数并递增父"trip"标签中的每个"ordini"标签。
在此处看到带有参数答案的此模板,该模板用于重复增量计数,但我无法使其对我有用。
感谢您的宝贵时间。
您有一个匹配
无论如何,在这种情况下有一个更简单的解决方案,而不是使用那个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" /> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="ordini"> <ordini> <NR> <xsl:number /> </NR> <xsl:apply-templates/> </ordini> </xsl:template> </xsl:stylesheet> |