1

我有很多 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(). 如果没有跨度,它可以工作,但如果有生成,则返回空白/null。我正在使用 Java xpath 实现。div 始终是内容节点的第二个。

4

1 回答 1

1
div/span/text() | div[not(span)]/text()

应该做的伎俩。这将选择作为子节点的文本节点<span>(如果有 a <span>),以及作为子节点的文本节点<div>if 没有<span>

您必须修改这些div部分以反映您正在评估 XPath 表达式的上下文。如果要对<div>文档中的所有元素执行此操作,请更改div//div.

更新:

根据您发布的新上下文信息,上述 XPath 应修改为:

./div[2]/span/text() | ./div[2][not(span)]/text()

但是,我不明白为什么您的版本在有<span>元素时不返回任何文本。您能否提供更多上下文 - 您正在评估 XPath 的 Java 代码;也许是您输入 HTML 的更详细的片段?示例输入 HTML 真的完全代表您的实际输入吗?那里可能还有另一个</div>不被注意的地方吗?

于 2013-07-29T13:29:07.730 回答