提问人:Thomas Sere 提问时间:3/11/2021 更新时间:3/11/2021 访问量:1027
不包含子节点的 XPath 节点
XPath node that doesn't contain a child
问:
我正在尝试使用XML访问某个元素,但我似乎无法理解它,而且我不明白为什么。
<ul class="test1" id="content">
<li class="list">
<p>Insert random text here</p>
<div class="author">
</div>
</li>
<li class="list">
<p>I need this text here</p>
</li>
</ul>
基本上,我想要的文本是第二个文本,但我希望/需要使用类似于 p[not(div)] 的东西来检索它。
我已经尝试了以下链接中的方法,但无济于事(xpath find node that doesn't contain child)
以下是我尝试访问文本的方式:
ul[contains(@id,"content")]//p[not(.//div)]/text()
如果您有任何可能的答案,谢谢!
答:
1赞
har07
3/11/2021
#1
在有问题中发布的 HTML 代码片段显示两个元素都不包含任何 ,因此表达式将匹配两者。第一个元素是 的同级元素(两者都共享相同的父元素),而不是父元素或祖先元素。以下 XPath 表达式将匹配第二个中的文本节点,而不是第一个中的文本节点:p
div
//p[not(.//div)]
p
p
div
li
p
//ul[contains(@id,"content")]/li[not(div)]/p/text()
简要说明:
//ul[contains(@id,"content")]
:查找属性值包含文本“内容”的元素ul
id
/li[not(div)]
:从中查找没有子元素的子元素。这将仅与示例 HTML 中的结尾匹配ul
li
div
li
/p/text()
: from such ,找到子元素,然后返回子文本节点,形式如下li
p
p
评论
0赞
Thomas Sere
3/11/2021
解决!多谢
评论