假设我有一个xml
<Root>
<TB>
..
</TB>
<TB>
..
</TB>
<TB>
..
<DIACT>2</DIACT>
</TB>
<TB>
...
<DIACT>3</DIACT>
</TB>
<TB>
----
<DIACT>4</DIACT>
---
</TB>
</Root>
我希望使用xslt映射获得第一个TB节点的位置,其中DIACT不为null或DIACT节点存在。就像在这种情况下,postion应该给我输出为3.因为第三个TB节点是第一个DIACT不为空的节点。
答案 0 :(得分:1)
使用强>:
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