我有很多html并希望通过xpath处理它。文本可以有两种可能的方式出现:
<div>
The Text
</div>
<!-- OR -->
<div>
<span>The Text</span>
</div>
<!-- BUT NOT -->
<div> other text
<span>The Text</span>
</div> other text
有没有办法可以使用单个xpath表达式获取“文本”?
修改
具体结构:
<div id="content">
<h1>...</h1>
<div>
...
</div>
<div>
<span>The Text</span>
</div>
我通过//div[@id='content'][1]
获取内容节点,并将其重复用于其他目的。在此上下文节点上,我尝试执行./div[2]/span/text() | ./div[not(span)][2]/text()
。如果没有span,它可以工作,但如果有一个spawn,则返回blank / null。我正在使用Java xpath实现。 div始终是内容节点的第二个。
答案 0 :(得分:1)
div/span/text() | div[not(span)]/text()
应该做的伎俩。这将选择<span>
的子项(如果有<span>
)的文本节点,以及<div>
的子项的文本节点(如果没有<span>
}
您必须修改div
部分以反映您正在评估XPath表达式的上下文。如果您想对文档中的所有<div>
元素执行此操作,请将div
更改为//div
。
根据您发布的新上下文信息,上述XPath应修改为:
./div[2]/span/text() | ./div[2][not(span)]/text()
但是,当有<span>
元素时,我不明白为什么你的版本没有返回任何文本。你能给出更多的上下文 - 你正在评估XPath的java代码;也许是输入HTML的更详细的片段?样本输入HTML是否真正准确地代表了您的实际输入?可能会有另一个</div>
在那里被忽视吗?