【问题标题】:perl XML::LibXML not selectorperl XML::LibXML 不是选择器
【发布时间】:2020-04-05 02:19:11
【问题描述】:

在以下 HTML sn-p 中:

<div><p class="a b c"></p> <p class="a c"></p> <p class="d"></p> </div>

我只想使用not 选择器选择第二个p 元素(带有a 类且不带有b 类),如下所示:

p.a:not(.b)

xpath 对应的是

.//p[contains(concat(' ', normalize-space(@class), ' '), ' a ')][not(self::*[contains(concat(' ', normalize-space(@class), ' '), ' b ')])].

但是当我使用那个 xpath 表达式时,它无法找到元素。

还有什么可以用来实现not选择器的效果的吗?

更新:看来我犯了一个错误,因为p.a:not(.b) 及其 xpath 对应项似乎确实适用于 XML::LibXML

它不起作用,因为我的 if 条件之一错误……

【问题讨论】:

    标签: css perl xpath selector xml-libxml


    【解决方案1】:

    要得到你想要的,只需使用这个 XPath:

    //p[@class[not(contains(.,"b"))]]
    

    换句话说:选择一个带有@class 属性但不包含“b”的p 元素。

    编辑:更具体地说(类必须包含 a 但不包含 b):

    //p[@class[contains(.,"a")] and not(@class[contains(.,"b")])]
    

    【讨论】:

    • 谢谢韦斯特。我已经更新了原帖:在我目前的情况下,我必须指定一个包含一个类并避免一个类的xpath。
    • 好的。帖子已编辑。我希望我这次能完全理解。
    • 事实证明,p.a:not(.b) 及其 xpath 对应项对于 XML::LibXML 工作正常(我再次重新编辑了原始帖子)。我已经尝试过你的答案 - 它也非常有效。谢谢韦斯特。
    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多