这是我的Xml文件
<w:body> <w:p><w:r><w:t>para1</w:t></w:r></w:p>
<w:p><w:r><w:t>para2</w:t></w:r></w:p>
<w:p><w:r><w:t>para3</w:t></w:r></w:p>
<w:p><w:r><w:t>para4</w:t></w:r></w:p>
<w:p><w:r><w:t>para5</w:t></w:r></w:p>
<w:tbl><w:tr><w:tc><w:p><w:r><w:t>para6</w:t></w:r></w:p></w:tc>
<w:tc><w:p><w:r><w:t>para7</w:t></w:r></w:p></w:tc> <!-- Assume This
is my Current Node -->
<w:tc><w:p><w:r><w:t>para8</w:t></w:r></w:p></w:tc>
</w:tr> </w:tbl> </w:body>
所以,现在我想得到<w:p>
内<w:body>
内的所有<w:p>
和<w:tbl>
内当前节点的前{{1}}的计数。所以,对于这种情况,我此时的预期数量是7 ......
我是怎么做到的?帮我搞定......
答案 0 :(得分:2)
使用强>:
count($vtheNode/preceding::w:p)
其中$vtheNode
是您的节点。
XSLT(1.0和2.0)解决方案:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="w:w">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vtheNode" select=
"/w:body/w:tbl/w:tr/w:tc[last()]"/>
<xsl:template match="/">
<xsl:value-of select="count($vtheNode/preceding::w:p)"/>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档(定义了命名空间以使其格式正确):
<w:body xmlns:w="w:w">
<w:p>
<w:r>
<w:t>para1</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>para2</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>para3</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>para4</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>para5</w:t>
</w:r>
</w:p>
<w:tbl>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>para6</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:p>
<w:r>
<w:t>para7</w:t>
</w:r>
</w:p>
</w:tc>
<!-- Assume This is my Current Node -->
<w:tc>
<w:p>
<w:r>
<w:t>para8</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
</w:body>
产生了想要的正确结果:
7
请注意:由于preceding::
和ancestor::
轴不重叠,因此更通用的解决方案不依赖于文档的结构并考虑在内一些想要计算节点可能是祖先的可能性是:
count($vtheNode/preceding::w:p | ($vtheNode/ancestor::w:p)