给出以下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')]]
但是,这不会返回任何节点。我不明白为什么,有人可以帮助我吗?
答案 0 :(得分:7)
答案 1 :(得分:1)
//li[./span[contains(text(),'Text1')]] - have just one target result
//li[./span[contains(text(),'Text')]] - returns two results as target
这种方法使用的东西在任何地方都没有很好的记录,很少有人能够理解它的强大功能
Xpath指定的元素具有由另一个xpath
定义的子节点答案 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