Farklı düğümler için XPath VEYA operatörü


144

XPath ile nasıl yapabilirim:

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

Sadece //titleçalışmaz çünkü bende//bookstore/magazine/title

ps Ben çok veya örnekleri gördüm ama esas olarak öznitelikler veya tek düğüm yapısı ile.


5
VEYA her iki tarafı da içerir. Aradığın şey XOR operatörü. OR kelimesinin İngilizce kullanımını mantıksal işleçlerle karıştırıyorsunuz.
Zoran Pavlovic

10
Bu durumda kullandığınız olsun hiç fark etmez ya ya xor her iki tarafı eşleşecek şekilde mümkün olmasın da.
Dan Hulme

Yanıtlar:


219

Üst olarak veya üst olarak titledüğüm olan tüm düğümler :zipcodebook

Versiyon 1:

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

Versiyon 2:

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

5
"|" XPath'ta gerçekten bir "VEYA operatörü" değildir.Tüm bir XML ağacının alt katmanlarından oluşan bir düğüm kümesi oluşturmanıza izin verir. "// book | // cd", tüm alt düğümler ve kök düğümün torunu arasında 'book' adlı tüm öğeleri bulduktan sonra 'cd' adlı tüm kelimeleri bul anlamına gelir. Kök düğümün alt dizininde yalnızca kitap düğümleri varsa, düğüm kümeniz yalnızca kitap düğümlerini içerecektir. Kök düğümün alt dizininde yalnızca cd düğümleri varsa, düğüm kümeniz yalnızca cd düğümlerini içerecektir. Kök düğümün alt dizininde hem kitap hem de cd düğümleri varsa, düğüm kümeniz hem kitap hem de cd düğümlerini içerecektir.
Stephan

1
Evet, ne olduğunu anladım "|" operatör. İlk sorum OR operatörü hakkında. Yani, kitaplar ve cd'ler varsa, sadece kitaplar, kitaplar yoksa sadece cd'ler varsa, cd'leri bulacaktır.
user569008 18:11

19
@ user569008: |olan birlik seti operatörü .

1
Yani, sorum için cevap yok / düğümler için XPath'ta VEYA operatörü yok mu?
Kullanıcı569008

3
Mantıksal işleçler (VEYA, XOR, VE) her programlama dilinde aynıdır, ancak doğal dil bunları biraz farklı yorumlar. Onlarla ilgili sorunları tartışırken belirsizliği ortadan kaldırmak en iyisidir. Ayrıca, XPath ile bu gibi sonucun düşünmek iyi değil varlık a veya b ama daha ziyade bu, tarafından yer alabilir bir veya b . Mantıksal olduğu oranlamına gelir a or b or both. Mantıksal xor(kapsamlı VEYA) , tarafından yerleştirilebileceği anlamına gelir either a or b, but not both. Mantıksal olduğu andanlamına gelir both a and b.
neXus

52

Union operatörüne sahip iki düğümden yalnızca birini seçmek istiyorsanız, bu çözümü kullanabilirsiniz: (//bookstore/book/title | //bookstore/city/zipcode/title)[1]


gerçekten (ve )[1]ikisi sadece birini seçmek anlamına gelir?!?!
oldboy

@Anthony Evet, her iki düğüm de varsa ikisinden birini seçer veya var olan tek tanesini seçer.
azurkin

tamam, ifadeni yanlış yorumladım. diğer herhangi bir "veya" operatör gibi çalışır, böylece ilk koşul doğru olursa, ikincisi atlanır, evet?
oldboy

@Anthony Hayır. Burada koşul yok. Düğümler var. Ve "|" - bir düğüm birliği operatörüdür. Belirtilen yollardan bir düğüm kümesi oluşturur ve düğüm sırasını garanti etmez. Belirtilen yoldaki düğüm yoksa, bir düğüm kümesinde eksiktir. Sonra, "[1]" yapısı bir düğüm kümesinden ilk düğümü alır.
azurkin

Demek istediğim, her iki düğüm de mevcutsa, her zaman ilk düğümü döndürecek şekilde orbir |operatöre veya diğer dillerde benzer şekilde işlev görmesidir.
oldboy

3

Eleman iki xpath içerir. Sonra aşağıdaki gibi iki xpath yazabilirsiniz:

xpath1 | xpath2

Örneğin:

//input[@name="username"] | //input[@id="wm_login-username"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.