2012-12-07 3 views
2

.//div/h1/text() | .//div/h2/text()을 사용하여 여러 경로를 선택할 수 있습니다. 그러나 두 경로 모두에 공통적 인 부분 (이 경우 .//div/)을 명시 적으로 작성하지 않고이를 수행 할 수있는 방법이 있는지 알고 싶습니다.x- 경로 "|"연산자 사용

+1

에 대한 질문을 요청하는 경우 : XPath는 2.0 일에서

.//div/*[self::h1 or self::h2]/text() 

하여 사용할 수 있습니다 XPat h. XPath 1.0 또는 2.0에 관심이 있는지 여부는 답변이 서로 다르고 두 버전이 모두 널리 사용되고 있기 때문에 실제로 말해야합니다. –

답변

2

바로 가기의 경우 XPath 2.0을 사용하면 예를 들어 예 : //div/h1 | //div/h2//div/(h1 | h2)이지만 XPath 1.0에는 해당 구문을 사용할 수 없습니다. XPath 3.0은 변수를 정의하기 위해 let 절을 도입 할 것입니다. 그래서 거기에 당신이 할 수 있다고 생각합니다. let $r := /html/body/div[3]/table[2]/tbody/tr[5] return ($r/span | $r/a).

XPath 2.0을 사용하여 수정 한 샘플의 경우 .//div/h1/text() | .//div/h2/text().//div/(h1/text() | h2/text())으로 줄일 수 있습니다. 그러나 XPath 1.0을 사용하면 모두 .//div/*[self::h1 | self::h2]/text()을 사용할 수 있습니다.

+0

실수를 수정했습니다. 표현은 다른 의미였습니다. 고마워, 설명. – root

0

.//div/*[(local-name() = 'h1') or (local-name() = 'h2')]/text()

트릭

0

사용 수행해야합니다

.//div/(h1|h2)/text()