XPath를 사용하여 텍스트 내용과 속성 값을 기반으로 노드를 선택하려면 어떻게 해야 합니까?
주어진 XML:
<DocText>
<WithQuads>
<Page pageNumber="3">
<Word>
July
<Quad>
<P1 X="84" Y="711.25" />
<P2 X="102.062" Y="711.25" />
<P3 X="102.062" Y="723.658" />
<P4 X="84.0" Y="723.658" />
</Quad>
</Word>
<Word>
</Word>
<Word>
30,
<Quad>
<P1 X="104.812" Y="711.25" />
<P2 X="118.562" Y="711.25" />
<P3 X="118.562" Y="723.658" />
<P4 X="104.812" Y="723.658" />
</Quad>
</Word>
</Page>
</WithQuads>
'7월' 텍스트와 Quad/P1/X 속성이 90보다 큰 노드를 찾고 싶습니다.따라서, 이 경우에는 어떠한 매치도 반환하지 않아야 합니다.그러나 GT(>) 또는 LT(<)를 사용하면 첫 번째 Word 요소가 일치합니다.eq(=)를 사용하면 상대가 되지 않습니다.
그래서:
//Word[text()='July' and //P1[@X < 90]]
진실로 돌아올 것입니다.
//Word[text()='July' and //P1[@X > 90]]
P1@X 속성에서 이를 적절하게 제한하려면 어떻게 해야 합니까?
또한 다른 페이지 번호에 대해 여러 개의 페이지 요소가 있다고 생각해 보십시오.다음과 같은 노드를 찾기 위해 위 검색을 추가로 제한하려면 어떻게 해야 합니까?text()='July', P1@X < 90
, 및 페이지@pageNumber=3
?
일반적으로 저는 XPath에서 고정되지 않은 //를 나쁜 냄새로 사용하는 것을 고려합니다.
한번 해보세요:-
/DocText/WithQuads/Page/Word[text()='July' and Quad/P1/@X > 90]
당신의 문제는 당신이 사용한다는 것입니다.//P1[@X < 90]
문서의 처음부터 다시 시작해서 어떤 것이든 사냥하기 시작합니다.P1
그래서 그것은 언제나 진실일 것입니다.유사하게//P1[@X > 90]
언제나 진실입니다.
"//" 문제를 제외하고 이 XML은 혼합 콘텐츠를 매우 이상하게 사용합니다.술어를text()='July'
하위 텍스트 노드가 7월과 정확히 일치하는 경우 요소와 일치합니다. 이는 주변 공백 때문에 예제에서는 사실이 아닙니다.소스 XML의 정확한 정의에 따라, 저는 다음과 같이 할 것입니다.[text()[normalize-space(.)='July'] and Quad/P1/@X > 90]
언급URL : https://stackoverflow.com/questions/1982624/using-xpath-how-do-i-select-a-node-based-on-its-text-content-and-value-of-an-at
'source' 카테고리의 다른 글
VBA에서 HTML 컨텐츠 구문 분석 (0) | 2023.10.26 |
---|---|
창을 표시하지 않고 파워셸 스크립트를 백그라운드 작업으로 실행하려면 어떻게 해야 합니까? (0) | 2023.10.26 |
소스 및 헤더 디렉토리가 별도인 Make 파일을 작성하는 방법? (0) | 2023.10.26 |
Angular 4+ 앱에서 구성 요소별 모듈을 만들어야 합니까? (0) | 2023.10.26 |
mysql 테이블에서 테이블 코멘트를 액세스하려면 어떻게 해야 합니까? (0) | 2023.10.21 |