반응형
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>
텍스트가 'July'이고 Quad / P1 / X 속성이 90보다 큰 노드를 찾고 싶습니다. 따라서이 경우 일치하는 항목이 반환되지 않아야합니다. 그러나 GT (>) 또는 LT (<)를 사용하면 첫 번째 Word 요소에서 일치 항목을 얻습니다. eq (=)를 사용하면 일치하지 않습니다.
그래서:
//Word[text()='July' and //P1[@X < 90]]
의지대로 true를 반환합니다.
//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]
반응형
'code' 카테고리의 다른 글
얼마나 많은 null 검사로 충분합니까? (0) | 2020.11.15 |
---|---|
Rails 작업이 있습니다. 스크립트 / 러너 또는 레이크를 사용해야합니까? (0) | 2020.11.15 |
문자열의 첫 번째 (또는 마지막) n 개 문자 추출 (0) | 2020.11.14 |
Oracle 11g db에서 사용자 목록을 찾는 방법 (0) | 2020.11.14 |
제네릭 유형의 Bean을 Autowire하는 방법 (0) | 2020.11.14 |