从XML中提取文本而忽略Children

时间:2013-10-01 14:53:16

标签: xml xpath

我正在尝试从节点获取文本,但是正在追加来自它的子节点的文本。我想避免它。

我使用HTMLCleanerHTML转换为XML,我有类似的内容

<td>
    <a>Link Text</a>
    Column Text
</td>

我只想提取Column Text。避免所选td子项中存在的任何文本有没有办法做到这一点?我到目前为止使用的是:

//td/text()

1 个答案:

答案 0 :(得分:1)

这个XPath:

//td[a = 'Link Text']/text()[last()]

将选择“列文字”。

请注意,如果有多个td的{​​{1}}的文字等于“链接文字”,则在 XPath 1.0 下,您将获得最后一个文字第一个这样的a;在 XPath 2.0 下,您将所有这样的td的最后一个文本节点。

请注意,在此示例中,这不会选择“先前文本”:

td

如果您既需要“列文本”和“先前文本”,又不需要“链接文本”,并且如果您可以使用XPath 2.0,请使用:

<td>
  prior text
  <a>Link Text</a>
  Column Text
</td>

(请务必同时选择正确的string-join(/td/text(), '') ;我假设这里只有一个可以简化。)

对于XPath 1.0,您必须在XPath之外组装文本节点。

另请参阅“XPath to return string concatenation of qualifying child node values”。