문제

다음 샘플 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 그리고 두 운영자 모두보다 우선 순위가 낮습니다 관계 그리고 평등 연산자 (=, !=, >, >=, &lt; 그리고 &lt;=).

따라서 글을 쓰는 것이 안전합니다: A = B and C = D

가장 빈번한 실수:

  1. 사람들은 글을 씁니다 AND 및/또는 OR. XPath는 대소 문자를 사용합니다.

  2. 사람들은 | (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']

충분하고 읽기 쉬워야합니다.

편집하다:
그렇습니다. 물론, '또는'술어 표현을 위해 '내 나쁜.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top