문제
다음 샘플 XML 구조가 있습니다.
<SavingAccounts>
<SavingAccount>
<ServiceOnline>yes</ServiceOnline>
<ServiceViaPhone>no</ServiceViaPhone>
</SavingAccount>
<SavingAccount>
<ServiceOnline>no</ServiceOnline>
<ServiceViaPhone>yes</ServiceViaPhone>
</SavingAccount>
</SavingAccounts>
내가해야 할 일은 'ServiceOnline'의 값이 '예'이거나 'ServiceViaPhone'의 값이 예입니다.
XPath는 두 줄을 반환해야합니다 !! 두 요소 값이 다음 xpath 샘플과 같이 예인 '저장 Account'노드를 필터링 할 수 있지만, 내가하고 싶은 것은 또는 요소 값 비교입니까 ???
/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
해결책
이것은 매우 기본적인 XPath 기능입니다. 논리 연산자와 여러 조건을 구성합니다. and
, or
, 및 기능 not()
.
and
보다 우선 순위가 높습니다 or
그리고 두 운영자 모두보다 우선 순위가 낮습니다 관계 그리고 평등 연산자 (=
, !=
, >
, >=
, <
그리고 <=
).
따라서 글을 쓰는 것이 안전합니다: A = B and C = D
가장 빈번한 실수:
사람들은 글을 씁니다
AND
및/또는OR
. XPath는 대소 문자를 사용합니다.사람들은
|
(Union) 대신 운영자or
마지막으로, 여기 내 해결책이 있습니다:
/savingaccounts/savingaccount [serviceonline = '예'또는 serviceviaphone = 'yes']]
다른 팁
/SavingAccounts/SavingAccount[(ServiceOnLine='yes') or (ServiceViaPhone='yes')]
할 것이다
/SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceViaPhone/text()='yes']
트릭을합니까?
현재 XPath 평가자가 없습니다.
편집하다:
정확하게 기억한다면 텍스트 ()가 필요하지 않으므로
[ServiceOnline='yes' or ServiceViaPhone='yes']
충분하고 읽기 쉬워야합니다.
편집하다:
그렇습니다. 물론, '또는'술어 표현을 위해 '내 나쁜.
제휴하지 않습니다 StackOverflow