不包含子节点的 XPath 节点

XPath node that doesn't contain a child

提问人:Thomas Sere 提问时间:3/11/2021 更新时间:3/11/2021 访问量:1027

问:

我正在尝试使用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()

如果您有任何可能的答案,谢谢!

xpath xml html 解析

评论


答:

1赞 har07 3/11/2021 #1

在有问题中发布的 HTML 代码片段显示两个元素都不包含任何 ,因此表达式将匹配两者。第一个元素是 的同级元素(两者都共享相同的父元素),而不是父元素或祖先元素。以下 XPath 表达式将匹配第二个中的文本节点,而不是第一个中的文本节点:pdiv//p[not(.//div)]ppdivlip

//ul[contains(@id,"content")]/li[not(div)]/p/text()

简要说明:

  • //ul[contains(@id,"content")]:查找属性值包含文本“内容”的元素ulid
  • /li[not(div)]:从中查找没有子元素的子元素。这将仅与示例 HTML 中的结尾匹配ullidivli
  • /p/text(): from such ,找到子元素,然后返回子文本节点,形式如下lipp

评论

0赞 Thomas Sere 3/11/2021
解决!多谢