2010-10-06 16 views
10

मैं निम्नलिखित टैग से नाम विशेषता मान निकालना चाहते हैंXPath क्वेरी कैसे दो विशेषता के आधार पर एक विशेषता के मान प्राप्त करने के लिए

<application 
    comments="Do not erase this one" 
    executable="run_CIET" 
    icon="default" 
    instances="1" 
    mode="1" 
    name="CIET" 
    order="10" 
    selection="1" 
    tool="y" 
/> 

मैं आसानी से मोड मूल्य के आधार पर नाम विशेषता मूल्य के मूल्य के रूप में नीचे दिखाया गया है प्राप्त कर सकते हैं

xpath Applications.xml '//applications/application[@mode='3']'/@name 

लेकिन अगर मैं अधिक condtion है जो जोड़ना चाहते हैं "नाम विशेषता मान जब मोड = एक्स और उपकरण विशेषता आवेदन टैग में वहाँ नहीं है"

कैसे हम वें करते हैं है? मैंने कुछ कोशिश की जैसे

xpath Applications.xml '//applications/application[@mode='3' and [email protected]]'/@name 

लेकिन यह काम नहीं कर रहा है।

मैंने पहले XPath का उपयोग नहीं किया है और मुझे यह मुश्किल लगता है कि मैं XPath पर W3C सहायता खोजता हूं लेकिन मुझे जो चाहिए वह नहीं मिला। कृपया मदद करे।

+0

अच्छा प्रश्न, +1। अपनी समस्या, एक संक्षिप्त और पूर्ण समाधान और कुछ सिफारिशों के स्पष्टीकरण के लिए मेरा उत्तर देखें। :) –

उत्तर

16
How do we do this? I tried something like 

    xpath Applications.xml '//applications/application[@mode='3' and [email protected]]'/@name 

but its not working. 



[email protected] 

XPath में अमान्य वाक्यविन्यास है। != ऑपरेटर है, लेकिन ! ऑपरेटर नहीं है।

उपयोग:

//applications/application[@mode='3' and not(@tool)]/@name 

दो चीजें आप हमेशा कोशिश करनी चाहिए से बचने के लिए कर रहे हैं:

  1. != ऑपरेटर का उपयोग - यह अजीब परिभाषा है और की तरह व्यवहार नहीं कर रहा है not() फ़ंक्शन - यदि कोई ऑपरेंड नोड-सेट है तो इसका उपयोग कभी भी करें।

  2. // संक्षेप का उपयोग करके जितना संभव हो सके से बचने की कोशिश करें - इससे संकेतक अक्षमता हो सकती है और असंगत व्यवहार भी हो सकता है जो अधिकांश लोगों के लिए अप्रिय नहीं है।

5

का उपयोग [email protected] के बजाय नौकरी करना चाहिए। यदि आपका XPath इंजन व्यवहार नहीं कर रहा है तो आप अनुमानित रूप से count(@tool)=0 कर सकते हैं, लेकिन यह आवश्यक नहीं होना चाहिए।

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