在xsl:for-each循环内计数器
如何在xsl:for-each循环中获得一个反映当前元素处理数量的计数器。
例如我的源XML是
<books> <book> <title>The Unbearable Lightness of Being </title> </book> <book> <title>Narcissus and Goldmund</title> </book> <book> <title>Choke</title> </book> </books>
我想得到的是:
<newBooks> <newBook> <countNo>1</countNo> <title>The Unbearable Lightness of Being </title> </newBook> <newBook> <countNo>2</countNo> <title>Narcissus and Goldmund</title> </newBook> <newBook> <countNo>3</countNo> <title>Choke</title> </newBook> </newBooks>
XSLT修改:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <newBooks> <xsl:for-each select="books/book"> <newBook> <countNo>???</countNo> <title> <xsl:value-of select="title"/> </title> </newBook> </xsl:for-each> </newBooks> </xsl:template> </xsl:stylesheet>
所以问题是如何代替???。 有没有任何标准的关键字,或者我只是必须声明一个variables,并在循环内增加它?
由于问题是相当长的,我应该期望一行或一个单词回答:)
position()
。 例如:
<countNo><xsl:value-of select="position()" /></countNo>
尝试插入<xsl:number format="1. "/><xsl:value-of select="."/><xsl:text>
。
请注意“1.” – 这是数字格式。 更多信息: 在这里
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <newBooks> <xsl:for-each select="books/book"> <newBook> <countNo><xsl:value-of select="position()"/></countNo> <title> <xsl:value-of select="title"/> </title> </newBook> </xsl:for-each> </newBooks> </xsl:template> </xsl:stylesheet>
尝试:
<xsl:value-of select="count(preceding-sibling::*) + 1" />
编辑 – 有一个大脑冻结在那里,位置()更直接!
您也可以在Postion()上运行条件语句,这在许多场景中确实有用。
例如。
<xsl:if test="(position( )) = 1"> //Show header only once </xsl:if>