質問
次のサンプルXML構造があります:
<SavingAccounts>
<SavingAccount>
<ServiceOnline>yes</ServiceOnline>
<ServiceViaPhone>no</ServiceViaPhone>
</SavingAccount>
<SavingAccount>
<ServiceOnline>no</ServiceOnline>
<ServiceViaPhone>yes</ServiceViaPhone>
</SavingAccount>
</SavingAccounts>
「ServiceOnline」の値が「yes」または「ServiceViaPhone」の値がyesであるXPATHを使用して、「SavingAccount」ノードをフィルタリングする必要があります。
XPATHは2行を返すはずです!!次のXPATHサンプルのように、両方の要素値がyesである「SavingAccount」ノードをフィルタリングできますが、私がしたいのは要素値の比較ですか?
/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
解決
これは非常に基本的なXPath機能です。論理演算子 and
、 or
、および関数 not()
。
=
は !=
よりも優先度が高く、両方の演算子は relational および 平等 演算子(>
、>=
、<
、<=
、A = B and C = D
およびAND
)。
したがって、安全に記述できます:OR
よくある間違い:
-
人々は
|
および/または<=>を書きます。 XPathでは大文字と小文字が区別されることに注意してください。 -
人々は<=>
の代わりに<=>(結合)演算子を使用します
最後に、ここに私の解決策があります:
/SavingAccounts/SavingAccount [ServiceOnLine='yes' or ServiceViaPhone='yes']
他のヒント
/SavingAccounts/SavingAccount[(ServiceOnLine='yes') or (ServiceViaPhone='yes')]
ウィル
/SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceViaPhone/text()='yes']
トリックをしますか?
現時点で便利なXPath評価者はいません。
編集:
正しく覚えていれば、text()は不要なので、
[ServiceOnline='yes' or ServiceViaPhone='yes']
十分で読みやすくする必要があります。
編集:
はい、もちろん、述語表現の「または」、私の悪い点。
所属していません StackOverflow