选择具有XPath的节点,其子节点包含特定的内部文本

时间:2014-08-09 17:06:41

标签: xml xpath

给出以下XML:

<root>
    <li><span>abcText1cba</span></li>
    <li><span>abcText2cba</span></li>
</root>

我想使用XPath选择li子节点包含内部文本span的所有Text1元素。

我从/root/li[span]开始,然后尝试进一步检查:/root/li[span[contains(text(), 'Text1')]]

但是,这不会返回任何节点。我不明白为什么,有人可以帮助我吗?

4 个答案:

答案 0 :(得分:7)

仅供读者阅读。 xpath是正确的。 OP:也许xpath解析器不支持表达式? / root / li [span [contains(text(),&#34; Text1&#34;)]]

答案 1 :(得分:1)

//li[./span[contains(text(),'Text1')]] - have just one target result
//li[./span[contains(text(),'Text')]] - returns two results as target

这种方法使用的东西在任何地方都没有很好的记录,很少有人能够理解它的强大功能

enter image description here

Xpath指定的元素具有由另一个xpath

定义的子节点

enter image description here

答案 2 :(得分:0)

试试这个XPath

li/*[@innertext='text']

答案 3 :(得分:0)

您当前的xpath应该是正确的。这是一个另类但很难看的。

XmlNodeList nodes = doc.SelectNodes("//span/parent::li/span[contains(text(), 'Text1')]/parent::li");

我们找到所有span-tag。然后我们找到所有带有span-tag作为子标签的li-tag,并包含'Text1'。

或者简单地说:

// span [contains(text(),'Text1')] / parent :: li