【发布时间】:2010-01-04 10:28:54
【问题描述】:
我正在尝试从已解析的 XML 文档中提取具有特定内部文本的元素。我知道我可以使用//myparent[mychild='foo'] 选择具有特定内文的子元素的元素,但实际上我只想在此示例中选择“mychild”元素。
<myparent>
<mychild>
foo
</mychild>
</myparent>
返回“mychild”节点的“foo”的 XPath 查询是什么?
【问题讨论】:
我正在尝试从已解析的 XML 文档中提取具有特定内部文本的元素。我知道我可以使用//myparent[mychild='foo'] 选择具有特定内文的子元素的元素,但实际上我只想在此示例中选择“mychild”元素。
<myparent>
<mychild>
foo
</mychild>
</myparent>
返回“mychild”节点的“foo”的 XPath 查询是什么?
【问题讨论】:
你试过了吗?
//myparent/mychild[text() = 'foo']
或者,您可以使用self 轴的快捷方式:
//myparent/mychild[. = 'foo']
【讨论】:
马特说过,但完整的解决方案:
//myparent[mychild='foo']/mychild
【讨论】:
如果测试结果如下所示,您可以考虑使用contains 函数返回真/假:
//mychild[contains(text(),'foo')]
【讨论】:
根据 HTML:
<myparent>
<mychild>
foo
</mychild>
</myparent>
文本为 foo 的 <mychild> 元素在其父 <myparent> 标记内,文本包含 leading 和 trailing 空白个字符。
因此,要选择<mychild> 元素,您可以使用以下任一解决方案:
使用normalize-space():
//myparent/mychild[normalize-space()='foo']
使用contains():
//myparent/mychild[contains(., 'foo')]
忽略父标签<myparent>你也可以使用:
使用normalize-space():
//mychild[normalize-space()='foo']
使用contains():
//mychild[contains(., 'foo')]
【讨论】: