2012-10-22 16 views
6

XPath के साथ, मुझे पता है कि आप निम्नलिखित तरीके से संघ ऑपरेटर का उपयोग कर सकते हैं:XPath में नोड नामों के साथ OR ऑपरेटर का उपयोग करना संभव है?

//*[@id="Catalog"]/thead | //*[@id="Catalog"]/tbody 

यह हालांकि एक छोटे से मेरे लिए अजीब हो रहा है। क्या इसके बजाय इनमें से किसी एक के समान कुछ करने का कोई तरीका है?

//*[@id="Catalog"]/(thead|tbody) 
//*[@id="Catalog"]/(thead or tbody) 
//*[@id="Catalog"]/*[nodename="thead" or nodename="tbody"] 

कि एक बहुत अधिक पठनीय और मेरे लिए सहज लगता है ...

उत्तर

5

जबकि अभिव्यक्ति:

//*[@id="Catalog"]/*[name()="thead" or name()="tbody"] 

सही है

यह अभिव्यक्ति और अधिक कुशल है:

//*[@id="Catalog"]/*[self::thead or self::tbody] 

अभी तक अगर जाँच करने के लिए एक तीसरा रास्ता है का नाम

//*[@id="Catalog"]/*[contains(''|thead|tbody|',concat('|',name(),'|'))] 

यह पिछले तकनीक का उपयोग करते हुए विशेष रूप से व्यावहारिक मामले में संभव नामों में से mumber बहुत लंबे (असीमित और अज्ञात लंबाई की) है हो सकता है: एक तत्व तार के एक निर्धारित अनुक्रम में से एक है। संभव नामों की पाइप-सीमांकित स्ट्रिंग को रूपांतरण के बाहरी पैरामीटर के रूप में भी पारित किया जा सकता है, जो इसकी सामान्यता, पुन: प्रयोज्यता और "DRY" -नेस को काफी बढ़ाता है।

0

हाँ, आप उपयोग कर सकते हैं:

//*[@id="Catalog"]/[nodename='thead' or nodename='tbody'] 

संपादित करें:

बस अपने मूल पोस्ट फिर से पढ़ें और एहसास हुआ कि आप क्या पूछ रहे थे। उपरोक्त वाक्यविन्यास इस स्थिति के लिए सही नहीं होगा। सुनिश्चित नहीं हैं कि नोड का उपयोग करने के नाम पर प्राप्त करने के लिए, लेकिन nodename सही नहीं है ...

+0

आप '[' से पहले स्टार भूल जाते हैं। (मैं सिर्फ पोस्ट संपादित करूँगा, लेकिन स्टैक ओवरफ्लो मुझे 6 अक्षरों से कम संपादन करने की अनुमति नहीं देता है।) – Ajedi32

+0

इसके अलावा, क्या आपको यह पता चल जाएगा कि यह कहां दस्तावेज है? =) – Ajedi32

+0

क्षमा करें, हाँ वह एक टाइपो था। आपको वहां एक स्टार (या अन्य तत्व नाम) की आवश्यकता होगी। –

4

आप name() समारोह के लिए देख रहे हैं:

//*[@id="Catalog"]/*[name()="thead" or name()="tbody"] 
2

ध्यान दें कि XPath 2.0 आपके प्रयास के साथ //*[@id="Catalog"]/(thead|tbody) सही है । हालांकि यह दृष्टिकोण XPath 1.0 के साथ काम नहीं करता है।

संबंधित मुद्दे