2012-06-13 7 views
42

मैं कुछ एक्सएमएल है कि इस तरह संरचित है है:xpath में शामिल नहीं है() का उपयोग कैसे करें?

<whatson> 
    <productions>  
    <production> 
     <category>Film</category> 
    </production> 
    <production> 
     <category>Business</category> 
    </production> 
    <production> 
     <category>Business training</category> 
    </production> 
    </productions> 
</whatson> 

और मैं एक वर्ग है कि "व्यापार" (तो बस इस उदाहरण में पहली उत्पादन) शामिल नहीं है के साथ हर उत्पादन का चयन करने की जरूरत है।

क्या यह xpath के साथ संभव है? मैंने इन लाइनों के साथ काम करने की कोशिश की लेकिन कहीं भी नहीं मिला:

//production[not(contains(category,'business'))] 

उत्तर

79

XPath क्वेरी केस संवेदनशील हैं। अपने उदाहरण को देखा है, मैं तो बस बदलते "व्यापार" द्वारा आप चाहते हैं परिणाम प्राप्त कर सकते हैं, करने के लिए "व्यापार"

//production[not(contains(category,'Business'))] 

मैं (जो, वैसे, भयानक है, कोई भी अब और उदाहरण प्रदान करने लगता है!) क्रोम में एक्सएमएल फाइल खोलकर और एक्सपीएथ प्रश्नों को निष्पादित करने के लिए डेवलपर टूल्स का उपयोग करके इसका परीक्षण किया है, और इसने मुझे फिल्म श्रेणी को वापस दिया है।

24

मैं मैं भी इस जोड़ना होगा, एक वर्ग के साथ हर उत्पादन है कि "व्यापार"

शामिल नहीं है हालांकि मैं सही रूप @ एरन के जवाब upvoted चयन करने की आवश्यकता ... कड़ाई से व्याख्या की, ओपी के विनिर्देश के रूप में

//production[category[not(contains(., 'Business'))]] 
बजाय

//production[not(contains(category, 'Business'))] 
0 लागू किया जाएगा

उत्तरार्द्ध प्रत्येक उत्पादन का चयन करता है जिसका पहलाcategory बच्चे में "व्यवसाय" नहीं है। production में category बच्चे, या एक से अधिक नहीं होने पर दो XPath अभिव्यक्ति अलग-अलग व्यवहार करेंगे।

यह अभ्यास में कोई फर्क नहीं पड़ता है जब तक कि प्रत्येक <production> में आपके छोटे उदाहरण एक्सएमएल में बिल्कुल एक <category> बच्चा है। चाहे आप हमेशा उस पर भरोसा कर सकें या नहीं, विभिन्न कारकों पर निर्भर करता है, जैसे कि आपके पास ऐसी स्कीमा है जो उस बाधा को लागू करती है। व्यक्तिगत रूप से, मैं अधिक मजबूत विकल्प के लिए जाऊंगा, क्योंकि इससे "लागत" बहुत अधिक नहीं होती है ... प्रश्न में बताए गए अनुसार आपकी आवश्यकता को मानना ​​वास्तव में सही है (उदाहरण के विपरीत 'प्रत्येक श्रेणी का चयन करें जिसमें श्रेणी नहीं है जिसमें "व्यवसाय" है)।

+0

@LoamyHound: धन्यवाद सुधार के लिए! अंत में मैंने आपका जवाब देखा, और 2 साल बाद लापता ब्रैकेट को ठीक किया। – LarsH

1

आप not(expression) समारोह

not() उपयोग कर सकते हैं xpath में एक समारोह (के रूप में एक ऑपरेटर के खिलाफ)

उदाहरण है:

//a[not(contains(@id, 'xx'))] 

या

expression != true() 
संबंधित मुद्दे