2011-03-14 2 views
0

나는 다음의 XPath 1.0 쿼리가 : 제가 이해가 발견되어 있지 않은 경우내가 원하는 노드가있을 때 내 XPath 쿼리가 기본 노드를 반환하는 이유는 무엇입니까?

/root/Nodes/*[self::CustomNode[not(../DefaultNode)]|self::DefaultNode]/Name

,이 존재하는 경우 /root/Nodes/CustomNode/Name을 반환하거나 /root/Nodes/DefaultNode/Name됩니다. 그러나 /root/Nodes/CustomNode/Name이있는 경우에도 /root/Nodes/DefaultNode/Name이 반환됩니다. 어떻게하면이 문제를 해결할 수 있을까요?

DefaultNode 노드는 항상 문서 순서로 CustomNode 노드를 처리합니다.

감사합니다.

+0

[첫 번째 노드가 XPath 쿼리에없는 경우 어떻게 다른 노드를 반환합니까?] (http://stackoverflow.com/questions/5292135/how-do-i-return- xpath-quer에 존재하지 않는 다른 노드의 노드) –

+0

당신이 내 previus 응답에서 조건을 거꾸로했기 때문에 가정이 잘못되었습니다. 전자가 존재하지 않을 때'CustomNode' 또는'DefaultNode'를 원한다면이 술어'[self :: CustomNode | self :: DefaultNode [not (../ CustomNode)]]' –

+0

을 사용해야합니다. 그것이 문제였습니다. 고맙습니다. – Tom

답변

1

세로선 (|)을 OR과 같은 것으로 생각하십니까? | http://www.w3schools.com/xpath/xpath_operators.asp

: 여기

은 세부 사항입니다 두 개의 노드 집합을 계산합니다 : // book | // CD 반환 노드 집합의 모든 책과 CD 요소

의미로 : 그것은 조건 A 또는 조건 A를 충족 노드 및 조건 B.

을 충족 노드를 반환
조건 B를 충족 노드를 반환
+0

나는 본다. 나는 파이프를 '또는'로 대체했지만 여전히 기본 노드를 반환하고 있습니다. 어떤 아이디어? 감사합니다 – Tom

+0

표현식이 술어 안에 있음에 유의하십시오. 노드 집합의 유효 부울 값은 비어 있지 않은 한 참입니다. –

관련 문제