次のサンプル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サンプルのように、両方の要素値が「はい」である「SavingAccount」ノードをフィルタリングできますが、実行したいのは、または要素値の比較ですか?
/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
これは非常に基本的なXPath機能です:論理演算子 and
、 or
、および関数 not()
。
and
はor
よりも優先度が高く、両方の演算子は よりも優先度が低くなります) Relational および equality 演算子(=
、!=
、>
、>=
、<
および<=
)。
だから、書くのは安全です:A = B and C = D
最も頻繁に犯されたいくつかの間違い:
人々はAND
やOR
を書きます。 XPathでは大文字と小文字が区別されることに注意してください。
人々は|
(共用体)演算子の代わりにor
最後に、これが私の解決策です:
/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']
十分で読みやすいはずです。
編集:
はい、もちろん、「または」、述語式の場合、私の悪いです。