2012-07-16 12 views
15

मैं अगर वहाँ लोगों को एक सूचीxpath विशेषता मान सूची से छोड़कर नोड्स का चयन करने के

में निर्दिष्ट एक विशेषता मान कार्य उदाहरण है कि अनदेखी नोड्स की एक सूची का चयन करने के लिए कम दृष्टिकोण है जानना चाहूंगा:

/item[not(@uid='id1') and not(@uid='id2')] 

वांछित विकल्प:

/item[not(@uid in('id1','id2'))] 

उत्तर

20

आप regex का उपयोग कर सकते हैं या तो - अपने xpath कार्यान्वयन यह समर्थन करता है तो - या लिखने

/item[not(@uid='id1' or @uid='id2')] 

जो थोड़ा कम हो सकता है।

+1

रिक्त स्थान के बिना एक अद्वितीय आईडी है, यदि आप 'id1' और 'id11' जैसे दो आइटम हैं तो यह अन्य विधि है, यह त्रुटि – Aitorito

3

हो सकता है कि कुछ इस तरह ??

/item[not(contains('id1 id2', @uid))] 
+1

काम करता है, लेकिन परिवर्तनों के लिए जोखिम भरा है, क्योंकि 'x (y, y)' मौजूद है, जो मौजूदा नहीं है। – Arne

+1

@Arne यह सबसे छोटा है लेकिन किस मामले में यह असफल होगा? फ़िल्टर करने के लिए हम जिस विशेषता का उपयोग करते हैं वह – Aitorito

5

तो विशेषता नामों की सूची बहुत लंबी है, निम्नलिखित इस स्थिति को संभालने के लिए एक अच्छा तरीका है:

//item[not(contains('|attr1|attr2|attr3|attr4|attr5|attr6|attrN|', 
        concat('|', @uid, '|') 
        ) 
      )] 
+0

दोनों को अनदेखा कर देगा। मुझे .NET में बहुत लंबा XPath बनाने की आवश्यकता है । बीज के साथ LINQ कुल विधि जैसी सामग्री का उपयोग करने के बजाय, आप केवल '|' के साथ तारों में शामिल हो सकते हैं, पीछे और अग्रणी जोड़ सकते हैं, और इसका उपयोग कर सकते हैं। धन्यवाद! – Nickmaovich

+0

@ निकमाविच, आपका स्वागत है। –

0

कम से कम Xpath में दृश्यों पर 2 सामान्य तुलना प्रदर्शन कर रहे हैं जोड़ो में और existentially, इसलिए आप लिख सकते हैं:

/item[not(@uid = ('id1','id2'))] 
संबंधित मुद्दे