perl XML::LibXML 不是选择器

jon*_*h_w 2 css perl xpath selector xml-libxml

在以下 HTML 片段中:

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

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

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弄错了一个条件......

E.W*_*est 5

要获得您想要的东西,只需使用此 XPath:

//p[@class[not(contains(.,"b"))]]
Run Code Online (Sandbox Code Playgroud)

换句话说:选择具有不包含“b”的@class 属性的 ap 元素。

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

//p[@class[contains(.,"a")] and not(@class[contains(.,"b")])]
Run Code Online (Sandbox Code Playgroud)