以下xslt代码错误地生成输出。实际上,它应该将值增加1,但是,它会使增量增加2.我需要知道原因。谁能让我知道为什么会这样?
xml输入是
<AAA>
<BBB>cc </BBB>
<BBB>ff </BBB>
<BBB>aa </BBB>
<BBB>fff </BBB>
<BBB>FFF </BBB>
<BBB>Aa </BBB>
<BBB>ccCCC </BBB>
</AAA>
和xslt输入代码是
<xsl:template match="/">
<xsl:text>
BBB[</xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>]: </xsl:text>
<xsl:value-of select="."/>
</xsl:template>
它产生如下[错误]的输出,但它应该提供诸如[1],[2],[3]等。
BBB[2]: cc
BBB[4]: ff
BBB[8]: aa
BBB[10]: fff
BBB[12]: FFF
BBB[14]: Aa
BBB[16]: ccCCC
有什么想法吗?
答案 0 :(得分:1)
我很确定如果你只有<xsl:template match="/">
,那么你甚至不会得到你说的结果。
假设你有
<xsl:template match="BBB">
<xsl:text>
BBB[</xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>]: </xsl:text>
<xsl:value-of select="."/>
</xsl:template>
然后结果取决于其他因素,例如您是否<xsl:strip-space elements="*"/>
或是否使用
<xsl:template match="AAA">
<xsl:apply-templates select="*"/>
</xsl:template>
您当前的结果表明您没有剥离空白文本节点,并且您要么依赖内置模板,要么在匹配<xsl:apply-templates/>
的模板中有<xsl:apply-templates select="node()"/>
或AAA
。这样,当前节点列表包含元素节点和文本节点(在元素节点之间),从而产生您的位置结果2,4,6 ......
我会用
修复代码<xsl:template match="BBB">
<xsl:text>
BBB[</xsl:text>
<xsl:number/>
<xsl:text>]: </xsl:text>
<xsl:value-of select="."/>
</xsl:template>