XPath : 속성이없는 노드를 선택하는 방법은 무엇입니까?


94

XPath를 사용하여 속성이없는 노드를 선택하는 방법 (속성 개수 = 0)?

예를 들면 :

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>

답변:


153
//node[not(@*)]

이것은 문서에서 속성없이 "node"라는 이름의 모든 노드를 선택하는 XPath입니다.


1
이것은 좋지만 여전히 <node class=""></node>우리가 할 수있는 일이 있습니까?
Marek

1
@MarekCzaplicki는이 사례를 해결하기 위해 아래 답변을 참조하십시오. stackoverflow.com/questions/1323755/…
phil

23
//node[count(@*)=0]

속성이없는 모든 <node>를 선택합니다.


9

Marek Czaplicki의 의견을 처리하고 답변을 확장하려면

//node[not(@*) or not(string-length(@*))]

.... 속성이 없거나 모두 비어있는 속성이있는 모든 노드 요소를 선택합니다. 모든 속성이 아니라 관심있는 특정 속성 인 경우 다음을 사용할 수 있습니다.

//node[not(@attribute1) or not(string-length(@attribute1))]

... 그리고 이것은 비어 attribute1있는 attribute1속성을 가진 OR 라는 속성이없는 모든 노드 요소를 선택합니다 .

즉, 다음 요소는 이러한 xpath 표현식 중 하나에 의해 선택됩니다.

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>

여기에서 jsfiddle 예제를 참조 하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.