sam*_*old 14 php xpath dom domdocument
我正在尝试选择所有dom元素,id="mydiv"但不包括那些也有的class="exclass".现在我正在做第一部分//*[@id="mydiv"].如何添加课程排除部分?
PS如果您想知道为什么我需要选择具有相同ID的多个元素,我只是在处理一个我无法控制的现有DOM.
Ja͢*_*͢ck 19
你可以使用否定:
//*[@id="mydiv and @class!="exclass"]
Run Code Online (Sandbox Code Playgroud)
如果class所有节点上可能不存在该属性,则需要:
//*[@id="mydiv" and (not(@class) or @class!="exclass")]
Run Code Online (Sandbox Code Playgroud)
最后(有些)奇怪的逻辑可以变成迈克尔提出的:
//*[@id="mydiv" and not(@class="exclass")]
Run Code Online (Sandbox Code Playgroud)
虽然,就个人而言,如果属性丢失,XPath无法进行比较这一事实感觉有点像缺点.
所写问题的答案是
//*[@id="mydiv" and not(@class="exclass")]
Run Code Online (Sandbox Code Playgroud)
如果存在@id属性并且其值为mydiv,则条件的前半部分为true.如果没有值为exclass的@class属性,则后半部分为true:即,如果没有class属性,或者如果存在class属性且其值不是"exclass".
在这种情况下避免使用!=:90%的时间,如果你想写作A!=B,你可能想要not(A=B).在A或B不是单身的情况下,即,它是空的,或者可以包含多个值的情况下,含义是不同的.