すべてが"search_query"
の同じ固定input
属性を持ついくつかのid
要素を持つHTMLファイル(そのコンテンツは私が制御しません)があります。ファイルの内容は変更される可能性がありますが、id属性"search_query"
を持つ2番目のinput
要素を常に取得したいことを知っています。
これを行うには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
要素は一貫したドキュメント構造なしでどこにでも表示できることに注意してください(ただし、少なくとも2つのinput
id属性が"search_query"
)の要素。
正しいXPath式は何ですか?
これはFAQです:
//somexpression[$N]
「//somexpression
で選択されたすべてのノードを検索します。これは、その親の$N
th子です。
必要なものは:
(//input[@id="search_query"])[2]
覚えておく:[]
演算子は、//
の略語よりも高い優先度(優先度)を持っています。
これはうまくいくようです:
/descendant::input[@id="search_query"][2]
これは、Michael Kayの「XSLT 2.0およびXPath 2.0プログラマーズリファレンス、第4版」から引用しています。
また、XMLパス言語の仕様の「短縮構文」セクションに、手がかりを提供するメモがあります http://www.w3.org/TR/xpath/#path-abbrev 。