XPath表达式:选择元素节点之间的文本节点

XPath expression: selecting text nodes between element nodes

基于以下HTML我想提取TextA、TextC和TextE。

<div id='content'>
    TextA
    <br/>
    <br/>
    <p>TextB</p>
    TextC
    <br/>
    TextC
    <p>TextD</p>
    TextE
</div>

我试过像这样获取 TextC,但没有得到我想要的结果:

有没有办法 select 文本节点而不使用像 //div/text()[1] 这样的索引?

这两个文本节点不在您的 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")]]