XPath या विभिन्न नोड्स के लिए ऑपरेटर


144

मैं XPath के साथ कैसे कर सकता हूं:

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

बस //titleकाम नहीं करेगा क्योंकि मेरे पास भी है//bookstore/magazine/title

पी एस मैंने बहुत सारे या उदाहरण देखे लेकिन मुख्यतः विशेषताओं या एकल नोड संरचना के साथ।


5
या दोनों पक्षों में शामिल है। आप जो देख रहे हैं वह XOR ऑपरेटर है। आप शब्द का अंग्रेजी उपयोग या तार्किक ऑपरेटरों के साथ कर रहे हैं।
ज़ोरान पावलोविक

10
इस मामले में यह कोई अंतर नहीं है कि क्या आप का उपयोग करता है या या XOR के रूप में यह दोनों पक्षों से मिलान करने के संभव नहीं है।
डैन हुल्मे

जवाबों:


219

माता-पिता के रूप में या नोड के titleसाथ सभी नोड्स :zipcodebook

संस्करण 1:

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

संस्करण 2:

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

5
"|" XPath में वास्तव में "OR ऑपरेटर" नहीं है। यह आपको पूरे XML पेड़ के विकल्प से बना एक नोडसेट बनाने की अनुमति देता है। "> किताब | // cd" का अर्थ है सभी बाल नोड्स के बीच और मूल नोड के वंशज सभी को 'पुस्तक' नाम देते हैं, फिर सभी को 'सीडी' नाम देते हैं। यदि रूट नोड के वंशज में केवल बुक नोड हैं, तो आपके नोड-सेट में केवल बुक नोड होंगे। यदि रूट नोड के वंशज में केवल सीडी नोड हैं, तो आपके नोड-सेट में केवल सीडी नोड होंगे। यदि रूट नोड के वंशज में पुस्तक और सीडी नोड दोनों हैं, तो आपके नोड-सेट में पुस्तक और सीडी नोड दोनों होंगे।
Stephan

1
हां, मैं समझ गया कि "क्या है।" ऑपरेटर है। मेरा प्रारंभिक प्रश्न OR ऑपरेटर के बारे में है। इसलिए, अगर किताबें और सीडी हैं, तो यह केवल किताबें ही पाएंगी, अगर किताबें नहीं हैं, लेकिन केवल सीडी हैं, तो यह सीडी मिल जाएंगी।
user569008

19
@ user569008: |है संघ सेट ऑपरेटर

1
तो, नोड्स के लिए XPath में मेरे प्रश्न / नहीं OR ऑपरेटर के लिए कोई जवाब नहीं है?
user569008

3
लॉजिकल ऑपरेटर्स (OR, XOR, AND) हर प्रोग्रामिंग लैंग्वेज में एक जैसे होते हैं लेकिन नेचुरल लैंग्वेज उन्हें थोड़ा अलग करती है। उनसे संबंधित मुद्दों पर चर्चा करते समय अस्पष्टता को दूर करना सबसे अच्छा है। इसके अलावा, XPath के साथ यह सबसे अच्छा नहीं है कि आपके परिणाम को एक या बी होने के रूप में सोचा जाए , बल्कि यह कि यह एक या बी द्वारा स्थित हो सकता है । लॉजिकल का orमतलब है कि यह द्वारा स्थित हो सकता है a or b or bothलॉजिकल xor(eXclusive OR) का मतलब है कि यह इसके द्वारा स्थित हो सकता है either a or b, but not both। लॉजिकल का andमतलब है कि यह द्वारा स्थित हो सकता है both a and b
नेक्सस

52

यदि आप यूनियन ऑपरेटर के साथ केवल दो नोड्स में से एक का चयन करना चाहते हैं, तो आप इस समाधान का उपयोग कर सकते हैं: (//bookstore/book/title | //bookstore/city/zipcode/title)[1]


वास्तव में (और )[1]केवल दो में से एक का चयन करने का मतलब है?!?!
ओल्डबॉय

@Anthony हाँ, यह दोनों में से एक का चयन करेगा, यदि दोनों नोड्स मौजूद हैं, या यह केवल एक का चयन करेगा जो मौजूद है।
अज़ुरिन

ठीक है, मैंने आपके कथन की गलत व्याख्या की। यह किसी भी अन्य "या" ऑपरेटर की तरह काम करता है, ताकि अगर पहली शर्त पूरी हो जाए, तो दूसरा बायपास हो जाए, हाँ?
ओल्डबॉय

@Anthony No. यहाँ कोई शर्तें नहीं हैं। नोड्स हैं। और "|" - एक नोड्स यूनियन ऑपरेटर है। यह निर्दिष्ट रास्तों से एक नोडसेट बनाता है, और नोड्स ऑर्डर की गारंटी नहीं देता है। यदि निर्दिष्ट पथ वाला नोड मौजूद नहीं है, तो यह बस एक नोडसेट में गायब है। फिर, "[1]" निर्माण एक नोड से पहला नोड प्राप्त करता है।
अज़ुर्किन

मेरा कहना यह है कि यह एक orया अन्य भाषाओं में एक |ऑपरेटर के समान कार्य करता है , ताकि यदि दोनों नोड्स मौजूद हों, तो यह हमेशा पहला नोड लौटाएगा?
ओल्डबॉय

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.