다른 노드에 대한 XPath OR 연산자


144

XPath로 어떻게 할 수 있습니까?

//bookstore/book/title or //bookstore/city/zipcode/title

그냥 //title나는 또한 가지고 있기 때문에 작동하지 않습니다//bookstore/magazine/title

추신 : 나는 많은 속성이나 예제를 보았지만 주로 속성이나 단일 노드 구조를 가지고있었습니다.


5
OR은 양쪽을 포함합니다. 당신이 찾고있는 것은 XOR 연산자입니다. 당신은 논리 연산자와 OR라는 단어의 영어 사용법을 혼동하고 있습니다.
Zoran Pavlovic

10
이 경우는 사용 여부를 차이도하지 않습니다 하거나 또는 XOR 는 양쪽 모두 일치하는 것은 불가능으로합니다.
Dan Hulme

답변:


219

부모 titlezipcode있거나 book노드 인 모든 노드 :

버전 1 :

//title[parent::zipcode|parent::book]

버전 2 :

//bookstore/book/title|//bookstore/city/zipcode/title

5
"|" XPath에서는 실제로 "OR 연산자"가 아니며 전체 XML 트리의 하위 트리로 구성된 노드 집합을 만들 수 있습니다. "// book | // cd"는 모든 하위 노드와 루트 노드의 하위 노드 중 'book'이라는 이름의 모든 노드를 찾은 다음 'cd'라는 이름의 모든 노드를 찾습니다. 루트 노드의 자손에 서적 노드 만있는 경우 노드 세트에는 서적 노드 만 포함됩니다. 루트 노드의 하위 항목에 cd 노드 만있는 경우 노드 세트에는 cd 노드 만 포함됩니다. 루트 노드의 자손에 북 노드와 CD 노드가 모두 있으면 노드 세트에 북 노드와 CD 노드가 모두 포함됩니다.
Stephan

1
네, "|"이 무엇인지 이해했습니다 연산자입니다. 나의 초기 질문은 OR 연산자에 관한 것입니다. 따라서 책과 CD가 있으면 책만 찾을 수 있고, 책이없고 CD 만 있으면 CD를 찾을 수 있습니다.
user569008

19
@ user569008 : |공용체 집합 연산자 입니다.

1
그래서 내 질문에 대한 대답이 없거나 노드의 XPath에 OR 연산자가 없습니까?
user569008

3
논리 연산자 (OR, XOR 및 AND)는 모든 프로그래밍 언어에서 동일하지만 자연 언어는 약간 다르게 해석합니다. 관련된 문제를 논의 할 때 모호성을 제거하는 것이 가장 좋습니다. 또한, XPath는과 같이 당신의 결과를 생각하는 것이 최선이 아니다 있는 A 또는 B를 하지만 오히려 것을, 에 의해 위치 할 수있는 A 또는 B . 논리 or는로 찾을 수 있음을 의미합니다 a or b or both. 논리 xor(eXclusive OR) 는로 찾을 수 있음을 의미합니다 either a or b, but not both. 논리 and는로 찾을 수 있음을 의미합니다 both a and b.
neXus

52

공용체 연산자로 두 노드 중 하나만 선택하려는 경우이 솔루션을 사용할 수 있습니다. (//bookstore/book/title | //bookstore/city/zipcode/title)[1]


정말로 (그리고 )[1]둘 중 하나만 선택하는 것을 의미합니까?!?!
oldboy

@Anthony 네, 두 노드가 모두 존재한다면 둘 중 하나를 선택하거나 존재하는 유일한 노드를 선택합니다.
azurkin

알았어, 네 진술을 잘못 해석 했어 다른 "또는"연산자처럼 작동하므로 첫 번째 조건이 true를 반환하면 두 번째 조건이 무시됩니다.
oldboy

@Anthony No. 여기에는 조건이 없습니다. 노드가 있습니다. 그리고 "|" -노드 통합 연산자입니다. 지정된 경로에서 노드 세트를 작성하며 노드 순서를 보장하지는 않습니다. 지정된 경로를 가진 노드가 존재하지 않으면 노드 세트에서 누락 된 것입니다. 그런 다음 "[1]"구문은 노드 세트에서 첫 번째 노드를 가져옵니다.
azurkin

내 요점은 연산자 or또는 다른 언어 와 비슷하게 작동하여 |두 노드가 모두 존재하면 항상 첫 번째 노드를 반환한다는 것입니다.
oldboy

3

요소에는 두 개의 xpath가 있습니다. 그런 다음 아래와 같이 두 개의 xpath를 작성할 수 있습니다.

xpath1 | xpath2

예 :

//input[@name="username"] | //input[@id="wm_login-username"]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.