不包含子节点的 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>

基本上我想要的文本是第二个,但我want/need使用类似于 p[not(div)] 的东西来检索它。

我尝试了以下link中的方法,但无济于事(xpath find node that does not contain child)

以下是我尝试访问文本的方式:

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

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

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

的文本节点:

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

简要说明:

  • //ul[contains(@id,"content")]:查找 ul 个元素,其中 id 属性值包含文本“content”
  • /li[not(div)]: 从这样的 ul 中找到没有子元素 div 的子元素 li。这将仅匹配示例 HTML
  • 中的结尾 li
  • /p/text():从这样的li中找到子元素p然后return子文本节点形成这样的p