14

を持つすべての dom 要素を選択しようとしていますが、.id="mydiv"を持つものは除外しますclass="exclass"。今は前編をやってい//*[@id="mydiv"]ます。クラス除外部分を追加するにはどうすればよいですか?

PS なぜ同じ ID を持つ複数の要素を選択する必要があるのか​​ 疑問に思っている場合は、制御できない既存の DOM で作業しているだけです。

4

2 に答える 2

20

否定を使用できます。

//*[@id="mydiv" and @class!="exclass"]

属性がすべてのノードに存在しない可能性がある場合はclass、これが必要です。

//*[@id="mydiv" and (not(@class) or @class!="exclass")]

最後の (やや) 奇妙なロジックは、Michael が提案したものに変えることができます。

//*[@id="mydiv" and not(@class="exclass")]

ただし、個人的には、属性が欠落している場合に XPath が比較を行うことができないという事実は、少し欠点のように感じます。

于 2012-06-20T05:33:01.273 に答える
9

書かれた質問への答えは

//*[@id="mydiv" and not(@class="exclass")]

@id属性があり、その値がmydivの場合、条件の前半はtrueです。後半は、値がexclassの@class属性がない場合、つまり、クラス属性がない場合、またはクラス属性があり、その値が「exclass」以外の場合に当てはまります。

この状況では!=の使用を避けてください。90%の確率で、書くことを考えている場合はA!=B、おそらくnot(A=B)。AまたはBのいずれかがシングルトンでない場合、つまり、空であるか、複数の値を含むことができる場合は、意味が異なります。

于 2012-06-20T08:03:08.927 に答える