異なるノードのXPath OR演算子


144

XPathでできること:

//bookstore/book/title or //bookstore/city/zipcode/title

ただ、//title私も持っているので、動作しません。//bookstore/magazine/title

PS私は多くのまたは例を見ましたが、主に属性または単一のノード構造でした。


5
ORは両側を含みます。あなたが探しているのはXOR演算子です。ORという単語の英語の用法を論理演算子で融合しています。
Zoran Pavlovic

10
この場合、どちらを使用するか、またはxorを使用するかに関係なく、両側を一致させることはできません。
Dan Hulme 2013

回答:


219

またはノードを親としてtitle持つすべてのノード:zipcodebook

バージョン1:

//title[parent::zipcode|parent::book]

バージョン2:

//bookstore/book/title|//bookstore/city/zipcode/title

5
「|」XPathでは実際には「OR演算子」ではありません。XMLツリー全体のサブツリーから構成されるノードセットを構築できます。"// book | // cd"は、すべての子ノードとルートノードの子孫の中で「book」という名前のすべてのものを見つけ、次に「cd」という名前のすべても見つけることを意味します。ルートノードの子孫にブックノードしかない場合、ノードセットにはブックノードのみが含まれます。ルートノードの子孫にcdノードしかない場合、ノードセットにはcdノードのみが含まれます。ルートノードの子孫にbookノードとcdノードの両方がある場合、ノードセットにはbookノードとcdノードの両方が含まれます。
ステファン

1
はい、「|」の意味がわかりました 演算子です。最初の質問はOR演算子についてです。したがって、本とCDがある場合は本のみが検索され、本がない場合はCDのみが検索され、CDが検索されます。
user569008 2011年

19
@ user569008:|は、和集合演算子です。

1
それで、私の質問に対する答えはありません/ノードのXPathにOR演算子はありませんか?
user569008 '19

3
論理演算子(OR、XOR、AND)はすべてのプログラミング言語で同じですが、自然言語では少し異なります。それらに関連する問題を議論するとき、あいまいさを取り除くことが最善です。さらに、XPathのではとあなたの結果を考えないように最善のものまたはbが、むしろそれがあることによって配置することができるまたはb。論理的とorは、それがによって見つけられることを意味しa or b or bothます。論理xor(排他的OR)は、によって検索できることを意味しeither a or b, but not bothます。論理的とandは、それがによって見つけられることを意味しboth a and bます。
ネクサス2017年

52

ユニオン演算子を使用して2つのノードのうち1つだけを選択する場合は、次のソリューションを使用できます。 (//bookstore/book/title | //bookstore/city/zipcode/title)[1]


本当に()[1]手段が2つだけのいずれかを選択するには?!?!
oldboy

@Anthonyはい、両方のノードが存在する場合は2つのうちの1つを選択します。または、存在する唯一のノードを選択します。
azurkin 2018

大丈夫、私はあなたの声明を誤解しました。他の「or」演算子と同様に動作するため、最初の条件がtrueを返した場合、2番目の条件はバイパスされます。
oldboy '10 / 07/18

@Anthonyいいえ。条件はありません。ノードがあります。そして「|」-ノード結合演算子です。指定されたパスからノードセットを作成し、ノードの順序を保証しません。指定されたパスを持つノードが存在しない場合は、ノードセットに存在しないだけです。次に、「[1]」構造はノードセットから最初のノードを取得します。
azurkin

私のポイントはor|演算子または他の言語では演算子と同様に機能するため、両方のノードが存在する場合、常に最初のノードを返すということですか?
oldboy

3

要素には2つのxpathがあります。次に、以下のような2つのxpathを記述できます。

xpath1 | xpath2

例えば:

//input[@name="username"] | //input[@id="wm_login-username"]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.