특정 속성없이 모든 요소를 ​​XPath로 필터링하는 방법

StackOverflow https://stackoverflow.com/questions/812090

  •  03-07-2019
  •  | 
  •  

문제

내 XPath는 약간 녹슬 었습니다 ...이 간단한 XML 파일이 있다고 가정 해 봅시다.

<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true"  />
</States>
</States>

간단한 XPath 쿼리를 실행하여 모든 진정한 상태를 구문 분석하고 싶습니다 (따라서 Territory = True가있는 상태를 끌어 내지 마십시오). stateprovince [@territory! = 'true']를 시도했지만 0이되었습니다. 다른 변형은 실패한 것 같습니다. 이것은 단순해야하지만 내가 원하는 것을 찾지 않는 것 같습니다.

모든 도움이 감사합니다.

도움이 되었습니까?

해결책

원하는 요소를 선택하는 하나의 XPath 표현식:

        /*/States/StateProvince[not(@territory='true')]

주목하십시오 저것 하나는 피해야합니다 // 가능할 때마다 약어 전체 문서 (컨텍스트 노드에 루팅 된 서브 트리)가 스캔되도록 원인.

위의 xpath 표현식은 사용을 피합니다 // 약어 원래로 제공 된 XML 문서의 구조를 고려하여.

XML 문서의 구조가 완전히 알려지지 않은 경우에만 (그리고 XPath 표현식이 사용되도록 의도 된 경우에만 // 약어가 고려됩니다.

다른 팁

당신은 매우 가깝습니다 :

//StateProvince[not(@territory) or @territory != 'true']

원하는 결과를 얻을 수 있어야합니다.

이것은 작동해야합니다 :

//StateProvince[not(@territory='true')]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top