基于以下HTML,我想提取TextA,TextC和TextE。
<div id='content'>
TextA
<br/>
<br/>
<p>TextB</p>
TextC
<br/>
TextC
<p>TextD</p>
TextE
</div>
我试图像这样得到TextC,但我没有得到我想要的结果:
//*[preceding::p[contains(.,"TextB")] and following::p[contains(.,"TextD")]]
["TextC", <br/>, "TextC"]
[<br/>]
有没有办法在不使用//div/text()[1]
等索引的情况下选择文本节点?
答案 0 :(得分:2)
两个文本节点不在XPath结果中的原因是因为*
仅匹配元素。要匹配元素和文本节点,您可以改为使用node()
:
//node()[preceding::p[contains(.,"TextB")] and following::p[contains(.,"TextD")]]
<强> Demo 强>
或者,如果您只想获取文本节点,即排除<br/>
,则可以使用text()
代替node()
:
//text()[preceding::p[contains(.,"TextB")] and following::p[contains(.,"TextD")]]