【问题标题】:XPath node that doesn't contain a child不包含子节点的 XPath 节点
【发布时间】:2021-06-09 07:21:00
【问题描述】:

我正在尝试使用 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 does not contain child

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

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

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

【问题讨论】:

    标签: xpath xml-parsing html-parsing


    【解决方案1】:

    有问题的 HTML sn-p 显示两个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 属性值包含文本“内容”
    • /li[not(div)]:从这样的ul 中找到没有子元素div 的子元素li。这将仅匹配示例 HTML 中的结尾 li
    • /p/text():从这样的li,找到子元素p,然后从这样的p返回子文本节点

    【讨论】:

    • 解决了!非常感谢