input
동일한 고정 id
속성을 가진 여러 요소 가있는 HTML 파일 (이 내용은 내가 제어하지 않음)이 있습니다 "search_query"
. 파일의 내용은 변경 될 수 있지만 항상 input
id 속성을 가진 두 번째 요소 를 얻고 싶다는 것을 알고 "search_query"
있습니다.
이를 위해 XPath 표현식이 필요합니다. 시도 //input[@id="search_query"][2]
했지만 작동하지 않습니다. 이 쿼리가 실패한 예제 XML 문자열은 다음과 같습니다.
<div>
<form>
<input id="search_query" />
</form>
</div>
<div>
<form>
<input id="search_query" />
</form>
</div>
<div>
<form>
<input id="search_query" />
</form>
</div>
위의 예는 단지 예일 뿐이며 다른 HTML 코드는 상당히 다를 수 있으며 input
요소는 일관된 문서 구조없이 어디에서나 나타날 수 있습니다 (단 input
, id 속성 이 항상 두 개 이상인 요소 는 항상 보장된다는 점을 제외하고 ) "search_query"
).
올바른 XPath 표현식은 무엇입니까?
답변
이것은 FAQ입니다 .
//somexpression[$N]
” //somexpression
해당 노드에서 선택한 모든 노드를 찾으십시오 $N
.”
당신이 원하는 것은 :
(//input[@id="search_query"])[2]
알아두기 : []
연산자는 //
약어 보다 우선 순위가 높습니다 (우선 순위) .
답변
이것은 작동하는 것 같습니다 :
/descendant::input[@id="search_query"][2]
Michael Kay의 “XSLT 2.0 및 XPath 2.0 프로그래머 참조 서, 4 판”에서이 작업을 수행합니다.
XML Path Language 사양 http://www.w3.org/TR/xpath/#path-abbrev 의 “Abbreviated Syntax”섹션에도 힌트가 있습니다.