[英]Select a node with XPath whose child node contains a specific inner text
鑒於以下 XML:
<root>
<li><span>abcText1cba</span></li>
<li><span>abcText2cba</span></li>
</root>
我想要 select 所有li
元素都有一個包含Text1
內部文本的span
子節點 - 使用 XPath。
我從/root/li[span]
開始,然后嘗試進一步檢查: /root/li[span[contains(text(), 'Text1')]]
但是,這不會返回任何節點。 我不明白為什么,有人可以幫助我嗎?
僅供讀者閱讀。 xpath是正確的。 OP:也許xpath解析器不支持表達式?
/root/li[span[contains(text(), "Text1")]]
xpath Kent Kostelac提供:
//span[contains(text(), 'Text1')]/parent::li
也可以這樣表示:
//li[span[contains(text(), 'Text1')]]
這有點短,並通過說“給我包含顯示'Text1'的跨度的li”來提高可讀性; 而不是說“你能看到那個顯示'Text1'的跨度嗎?好的,所以把它的 li parent 給我”,這就是原來的措辭實際上在說什么。
要檢查深層嵌套子項中的內容,請在 Xpath 表達式中使用.//*
。
<div class="foo h1">
<p>
<span>
<b>bar</b>
</span>
</p>
</div>
要找到一個帶有 class .foo
的 div,它也包含一個帶有文本欄的孩子,只需使用以下bar
表達式
$x('//div[contains(@class, "foo") and .//*[contains(text(), "bar")]]')
試試這個XPath
li/*[@innertext='text']
您當前的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.