XPath-특정 유형의 자식이없는 노드 가져 오기
XML : /A/B
또는/A
자식 A
이없는 모든 노드 를 얻고 싶습니다 B
.
난 노력 했어
/A[not(B)]
/A[not(exists(B))]
성공없이
/*[local-name()="A" and .... ]
가능한 경우 구문을 사용하는 솔루션을 선호 합니다. 작동하는 아이디어가 있습니까?
설명. XML은 다음과 같습니다.
<WhatEver>
<A>
<B></B>
</A>
</WhatEver>
또는
<WhatEver>
<A></A>
</WhatEver>
어쩌면 *[local-name() = 'A' and not(descendant::*[local-name() = 'B'])]
?
또한 루트 요소가 하나만 있어야하므로 /A[...]
모든 XML을 다시 가져 오거나 전혀 가져 오지 않습니다. 어쩌면 //A[not(B)]
또는 /*/A[not(B)]
?
나는 왜 /A[not(B)]
당신을 위해 작동하지 않는지 이해 하지 못합니다.
~/xml% xmllint ab.xml
<?xml version="1.0"?>
<root>
<A id="1">
<B/>
</A>
<A id="2">
</A>
<A id="3">
<B/>
<B/>
</A>
<A id="4"/>
</root>
~/xml% xpath ab.xml '/root/A[not(B)]'
Found 2 nodes:
-- NODE --
<A id="2">
</A>
-- NODE --
<A id="4" />
이것 "/A[not(.//B)]"
또는 이것을 시도하십시오 "/A[not(./B)]"
.
첫 번째 /로 인해 XPath가 문서의 루트에서 시작됩니다. 의도 한 바가 아닐 수도 있습니다.
아마도 당신은 // A [not (B)]를 의미했을 것입니다. 이것은 직접 B 자식이없는 어떤 수준에서도 문서의 모든 A 노드를 찾을 것입니다.
또는 A 노드가 포함 된 노드에 이미있을 수 있습니다.이 경우 A [not (B)]를 XPath로 지정합니다.
루트에서 계층 구조의 어느 곳에서나 A를 얻으려는 경우 이것은 작동합니다 (xslt 1.0 및 xslt에서 사용되는 경우 2.0)
//descendant-or-self::node()[local-name(.) = 'a' and not(count(b))]
또는 할 수 있습니다
//descendant-or-self::node()[local-name(.) = 'a' and not(b)]
또는
//descendant-or-self::node()[local-name(.) = 'a' and not(child::b)]
xslt에서 동일한 것을 달성하는 방법은 없습니다.
참고 : XPath는 대소 문자를 구분하므로 노드 이름이 다른 경우 (아무도 A, B를 사용하지 않을 것임) 대소 문자가 일치하는지 확인하십시오.
이것을 사용하십시오 :
/*[local-name()='A' and not(descendant::*[local-name()='B'])]
참고 URL : https://stackoverflow.com/questions/862239/xpath-get-node-with-no-child-of-specific-type
'Nice programing' 카테고리의 다른 글
Rust에서 벡터를 정렬하는 방법? (0) | 2020.11.28 |
---|---|
일부 웹 사이트의 제목에? utf8 = ✓가있는 이유는 무엇입니까? (0) | 2020.11.28 |
Python unittest를 사용하여 파일을 작성하는 함수의 단위 테스트를 수행하는 방법 (0) | 2020.11.27 |
~ 2,000 만 개의 샘플 포인트와 기가 바이트의 데이터가 포함 된 대화 형 대형 플롯 (0) | 2020.11.27 |
Hibernate 4에서 세션 팩토리 생성 (0) | 2020.11.27 |