質問

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つのオブジェクトが文字列である場合、文字列値で比較を実行する結果が実行されるようにノードセットにノードがある場合にのみ比較が当てはまります。ノードと他の文字列は真です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top