如何在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>
Run Code Online (Sandbox Code Playgroud)
我想得到的是:
<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>
Run Code Online (Sandbox Code Playgroud)
要修改的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>
Run Code Online (Sandbox Code Playgroud)
所以问题是应该用什么代替?是否有任何标准关键字或我是否必须声明一个变量并在循环内增加它?
由于问题很长,我应该期待一行或一个单词的答案:)
red*_*are 136
position().例如:
<countNo><xsl:value-of select="position()" /></countNo>
Run Code Online (Sandbox Code Playgroud)
尝试:
<xsl:value-of select="count(preceding-sibling::*) + 1" />
Run Code Online (Sandbox Code Playgroud)
编辑 - 那里有一个大脑冻结,位置()更直接!
小智 7
您还可以在Postion()上运行条件语句,这在许多情况下都非常有用.
例如.
<xsl:if test="(position( )) = 1">
//Show header only once
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169194 次 |
| 最近记录: |