sqlのように動作するノードセットのxpath query where where
質問
XMLドキュメントのサンプル:
<xml>
<list>
<item refid="1" />
<item refid="3" />
</list>
<catalogue>
<model id="1"><details /></model>
<model id="2"><details /></model>
<model id="3"><details /></model>
</catalogue>
</xml>
//モデル[@id =(// item/ @refid)]のようなものを照会したいと思います。
解決
//モデル[@id =(// item/ @refid)]のようなものを照会したいと思います。
ここでの主な問題は、自信の欠如です また、実際にXPathエンジンを実行して、思いついた表現を評価しません。
提案したXPath式を評価した場合:
//model[ @id = (//item/@refid) ]
あなたはそれが正確に(2)を選択することがわかります model
要素、その id
属性は、 refid
の属性 item
の子供である要素 list
.
@jörn-horstmannは、彼の答えで、これらの結果を得る理由をすでに説明しています。
マイナーな発言は、一般的に使用を避けることです //
略語. 。ドキュメント全体がスキャンされ、非常に非効率的です。この場合、私は同等のものを使用しますが、おそらくより速くXPath式を評価します。
/*/catalogue/model[@id = /*/list/item/@refid]
他のヒント
Xpathの表現は、すでに必要なものを正確に返す必要があります。から引用 http://www.w3.org/tr/xpath/#booleans, 、5番目の段落:
比較する1つのオブジェクトがノードセットであり、もう1つのオブジェクトが文字列である場合、文字列値で比較を実行する結果が実行されるようにノードセットにノードがある場合にのみ比較が当てはまります。ノードと他の文字列は真です
所属していません StackOverflow