Xpath 选择“text()”,1)位于给定节点之前,但2)也是另一个给定节点的后代
这是的后续问题,但不幸的是,该问题的答案不适用 假设我有以下XML:Xpath 选择“text()”,1)位于给定节点之前,但2)也是另一个给定节点的后代,xpath,Xpath,这是的后续问题,但不幸的是,该问题的答案不适用 假设我有以下XML: <body> <div id="global-header"> header </div> <div id="a"> <h3>some title</h3> <p>text 1 <b
<body>
<div id="global-header">
header
</div>
<div id="a">
<h3>some title</h3>
<p>text 1
<b>bold</b>
</p>
<div>
<p>abc</p>
<p>text 2</p>
<p>def</p>
</div>
</div>
</body>
警告是
和
text 2
节点可以任意地嵌入树中的深处,因此类似xpath的//p[text()=“text 2”]/前面的兄弟节点::*
只提取abc
,而忽略其他节点您可以尝试以下XPath表达式:
//p[.='text 2']/preceding::text()[ancestor::div[@id='a']]
这种方法的缺点是,text()
节点可能没有明确分开,而是为子元素合并。要分离它们,需要某种for循环
//p[.='text 2']/preceding::text()[ancestor::div[@id='a']]