Xml 如何计算所有<;w:p>;使用xslt 2.0基于我的特定标准的节点?
这是我的XML文件Xml 如何计算所有<;w:p>;使用xslt 2.0基于我的特定标准的节点?,xml,xslt,xpath,Xml,Xslt,Xpath,这是我的XML文件 <w:document xmlns:w="w"> <w:body> <w:p> <w:r> <w:pict> <v:shape xmlns:v="v"> <v:textbox&
<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段
正常段落1
第2段
第3段
第4段
第5段
para6
帕拉7
帕拉8
逻辑:1
因此,现在我只想计算
标记中所有前面的
节点。例如,现在我们有来自
的5个节点
逻辑:2
然后如果(
内部
),则计算
内部的所有
,直到当前节点到达
因此,预期的最终结果是:7
我已经写了这个问题的答案,但计算错误
<xsl:value-of select="count($currentNode/preceding::w:p)"/>
它写为8,因为它也将在
中计数(请参阅我的代码上的忽略大小写)。我不想要它
我需要总计数,如logic1+logic2听起来您想忽略嵌套在其他w:p元素中的w:p元素 如果是这样的话,那么您需要修改for语句,使其只包含没有w:p元素作为祖先的w:p元素
<xsl:value-of select="count($currentNode/preceding::w:p[not(ancestor::w:p)])"/>
:非常感谢。请让我试试。。。“我很快就来了”蒂姆:干得好,蒂姆。。。非常感谢…它工作得非常好…感谢您的时间…@@Tim::您能参考一些有关XSLT编程的好书吗?。我对学习XSLT非常感兴趣。请参考任何有关XSLT的书me@Saravanan:请参阅关于优秀XSLT书籍/资源的回复:@Tim C:此表达式等效于:
count($currentNode/前置::w:p)
因为前面的::
和祖先::
轴是不重叠的!请修改并更正您的答案。另外,如果您还提供了用于评估此XPath表达式的XML文档,那就太好了——这个问题没有提供格式良好的XML文档,两个人可能会构造两个d基于此的不同格式良好的XML文档。您没有说哪个节点是当前节点进行计数???@DimitreNovatchev::我在上面的代码中提到过。请参阅第7段tag@_Saravanan:您给我们的文本甚至不是格式良好的XML文档:未定义的名称空间+未关闭的标记--请更正,否则您的问题就不是定义好了。@_Saravanan:您可能有兴趣知道,有一个更简单且不误导的XPath表达式可以计算所需的计数。@_Saravanan:为什么您继续提供误导性信息?包含“para8”的是w:p
,而不是包含“para7”的根据您最后的评论。请注意提高您问题的准确性——这一个问题仍然完全令人困惑。除此之外,您的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>
<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