我需要计算XML树中某些节点的数量,直到找到具有特定子节点的节点。
我的XML示例如下所示:
<w:body>
<w:p w:rsidR="00680C51" w:rsidRDefault="00680C51">
<w:r>
<w:t xml:space="preserve">This is </w:t>
</w:r>
<w:proofErr w:type="spellStart"/>
<w:r>
<w:t>outside</w:t>
</w:r>
<w:proofErr w:type="spellEnd"/>
</w:p>
<w:p w:rsidR="00680C51" w:rsidRDefault="00680C51"/>
<w:p w:rsidR="00680C51" w:rsidRDefault="00680C51">
<w:pPr>
<w:sectPr w:rsidR="00680C51">
<w:pgSz w:w="11906" w:h="16838"/>
<w:pgMar w:top="1701" w:right="1134" w:bottom="1701" w:left="1134" w:header="708" w:footer="708" w:gutter="0"/>
<w:cols w:space="708"/>
<w:docGrid w:linePitch="360"/>
</w:sectPr>
</w:pPr>
</w:p>
<w:p w:rsidR="00680C51" w:rsidRPr="00680C51" w:rsidRDefault="00680C51">
<w:pPr>
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
</w:pPr>
<w:bookmarkStart w:id="1" w:name="Reminder"/>
<w:bookmarkEnd w:id="1"/>
<w:r w:rsidRPr="00680C51">
<w:rPr>
<w:lang w:val="en-US"/>
</w:rPr>
<w:t>Reminder</w:t>
</w:r>
</w:p>
</w:body>
我需要做的是创建一个查询,该查询计算有一个名为w:p
的子节点的w:sectPr
个节点高于某个w:p
节点,该节点有一个子节点被调用具有给定w:bookmarkStart
属性的name
例如,针对此特定情况的查询结果为1。
在XPath 2.0中,我使用以下查询:
count(//w:bookmarkStart[@w:name = "Reminder"]/ancestor::w:p[1]/preceding-sibling::w:p[*/w:sectPr])]
问题是我不知道如何在XPath 1.0中使用它。
非常感谢任何帮助。
答案 0 :(得分:0)
我想出的答案看起来像这样
count(//w:body/*[following-sibling::node()[self::*[descendant-or-self::w:bookmarkStart[@w:name="Reminder"]]]]/*[w:sectPr])
基本上我找到了我正在寻找的bookmarkStart
然后我回到XML树上,然后选择包含sectPr
的节点。
在XSLT中,这可以作为一种魅力。
This帖子帮助我理解了正在发生的事情