使用:
count(/*/TB[DIACT][1]/preceding-sibling::TB) +1
,因为你需要这个获得进一步的处理。第,设定具有上述值的变量:
<xsl:variable name="vPos"
select="count(/*/TB[DIACT][1]/preceding-sibling::TB) +1"/>
另外,可以使用xsl:number
:
<xsl:variable name="vPos2">
<xsl:number count="TB"/>
</xsl:variable>
下面是这两种技术的简单演示:
<xsl:template match="/">
<xsl:variable name="vPos"
select="count(/*/TB[DIACT][1]/preceding-sibling::TB) +1"/>
<xsl:value-of select="$vPos"/>
===========
<xsl:for-each select="/*/TB[DIACT][1]">
<xsl:variable name="vPos2">
<xsl:number count="TB"/>
</xsl:variable>
<xsl:value-of select="$vPos2"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
当这种转变是在所提供的XML文档应用:
<Root>
<TB> .. </TB>
<TB> .. </TB>
<TB> ..
<DIACT>2</DIACT>
</TB>
<TB> ...
<DIACT>3</DIACT>
</TB>
<TB> ----
<DIACT>4</DIACT> ---
</TB>
</Root>
两个正确结果生产:
3
===========
3
你能解释为什么你想要该节点的位置? – Tomalak 2012-07-31 12:03:05
其实我需要根据这个位置做一些进一步的处理。对不起,但我无法解释整个场景。但是有什么办法可以让我得到这个。 – 2012-07-31 12:06:23
根据我的经验:您几乎从不需要节点的位置来进行进一步处理。很可能你试图完全错误地做某件事,所以解释这种情况可能是有益的。 – Tomalak 2012-07-31 12:08:02