以下の実際のXML構造を想定してください(変更できません)。その時点で我々が必要とする、私たちは各戻りXMLのノードリストにdetailrecord返さハンドルその後XMLマスター/詳細データの選択XML内の個別のデータセット
detailnodes = doc.documentElement.getElementsByTagName('/root/detail')
:
<root>
<master>
<record>
<ID>1</ID>
<Value>One</Value>
</record>
<record>
<ID>2</ID>
<Value>Two</Value>
</record>
</master>
<detail>
<record>
<ID>A</ID>
<MasterID>1</MasterID>
<Value>Somevalue a</Value>
</record>
<record>
<ID>B</ID>
<MasterID>2</MasterID>
<Value>Somevalue b</Value>
</record>
<record>
<ID>C</ID>
<MasterID>1</MasterID>
<Value>Somevalue c</Value>
</record>
<record>
<ID>D</ID>
<Value>Somevalue d</Value>
</record>
</detail>
</root>
まず、我々は可能な詳細レコードのリストを返すために、XMLでXPathクエリを実行しますXPath式のみを使用して、detailnode内のMasterIDに基づいてマスター・レコードの値を戻します。 私たちは、現在のレコードのMasterIDを盗ん、その後retreived値
例(これが好きではありません)
for each detailnode in detailnodes do
masterID = detailnode.ChildNodes['MasterID'].value
masterValue = detailnode.selectNodes('../master[ID=" + MasterID + "]/Value')[0].value
end
例(好ましい方法に基づいて、XPath式を作成するために、アプリケーション・コードを使用したくありません)XPathの内部
for each detailnode in detailnodes do
masterValue = detailnode.selectNodes('../master[ID=?MasterID?]/Value')[0].value
end
?MasterID?
発現は現在detailnodeのMasterID値を返さなければなりません。
これは純粋なXPath式を使用しても可能ですか?
EDIT 注:私は現在のスコープ内のデータをキー、はい、あなたは、XML文書内の他の場所で値を検索することができるはず
私はちょうど、あなたが小さな 'v'で' value'を書いていることを見ています。しかし、あなたのXMLはそれを大文字にしています。これは難しいかもしれない "エラー" – Shnugo
OK、私はデモを更新します(実際の構造ははるかに複雑です、これは問題を説明するためだけだった) –