这是我的Xml文件。
<w:document xmlns:w="w">
<w:body>
<w:p>
<w:r>
<w:pict>
<v:shape xmlns:v="v">
<v:textbox>
<w:txbxContent>
<w:p> <!-- My Ignore case -->
<w:r>
<w:t>paragraph1
</w:t>
</w:r>
</w:p>
</w:txbxContent>
</v:textbox>
</v:shape>
</w:pict>
</w:r>
<w:r>
<w:t>Normal Paragraph1</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph2
</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph3
</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph4
</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph5
</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><!-- Assume This is my Current Node -->
</w:tc>
<w:tc>
<w:p><w:r><w:t>para8</w:t></w:r></w:p>
</w:tc>
</w:tr>
</w:tbl>
</w:body>
</w:document>
逻辑:1
所以,现在我只想在<w:p>
标记内计算所有前面的<w:body>
个节点。例如,现在我们有<w:body>
个节点。
逻辑:2
然后如果<w:tbl>
在<w:body>
内),则计算<w:p>
内的所有<w:tbl>
,直到当前节点到达。
所以,预期的决赛是:7。
我已经为此撰写了查询......这是错误的计算。
<xsl:value-of select="count($currentNode/preceding::w:p)"/>
它被写为8.因为它也会在<w:p>
内计算<w:p>
(参见我的代码中的忽略大小写)。我不想要它。
我需要总计数,例如 logic1 + logic2 。
请帮我解决这个问题......
答案 0 :(得分:2)
听起来你想忽略嵌套在其他 w:p 元素中的 w:p 元素。
如果是这样,那么你需要修改for语句,只包括 w:p 元素,它没有 w:p 元素作为祖先。
<xsl:value-of select="count($currentNode/preceding::w:p[not(ancestor::w:p)])"/>
这应该返回值7而不是8.顺便说一句,我假设当前节点 para8 。
因此,假设以下XML文档
<w:document xmlns:w="w">
<w:body>
<w:p>
<w:r>
<w:pict>
<v:shape xmlns:v="v">
<v:textbox>
<w:txbxContent>
<w:p><!-- My Ignore case -->
<w:r>
<w:t>paragraph1 </w:t>
</w:r>
</w:p>
</w:txbxContent>
</v:textbox>
</v:shape>
</w:pict>
</w:r>
<w:r>
<w:t>Normal Paragraph1</w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph2 </w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph3 </w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph4 </w:t>
</w:r>
</w:p>
<w:p>
<w:r>
<w:t>paragraph5 </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:document>
如果您使用以下XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="w">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="currentNode" select="//w:p[w:r/w:t = 'para8']" />
Old: <xsl:value-of select="count($currentNode/preceding::w:p)"/>
-----
New: <xsl:value-of select="count($currentNode/preceding::w:p[not(ancestor::w:p)])"/>
</xsl:template>
</xsl:stylesheet>
然后返回以下内容:
Old: 8
-----
New: 7