XPath - उन तत्वों का चयन करना जो एक मूल्य के बराबर हैं


110

Xpath में, मैं उन तत्वों का चयन करना चाहता हूं जो एक विशिष्ट मूल्य के बराबर हैं।

नमूना XML डेटा:

<aaa id="11" >
    <aaa id="21" >
        <aaa id="31" ></aaa>
        <bbb id="32" >
            <aaa id="41" ></aaa>
            <bbb id="42" ></bbb>
            <ccc id="43" ></ccc>
            <ddd id="44" >qwerty</ddd>
            <ddd id="45" ></ddd>
            <ddd id="46" ></ddd>
        </bbb>
    </aaa>
    <bbb id="22" >
         <aaa id="33" >qwerty</aaa>
         <bbb id="34" ></bbb>
         <ccc id="35" ></ccc>
         <ddd id="36" ></ddd>
         <ddd id="37" ></ddd>
         <ddd id="38" ></ddd>
    </bbb>
    <ccc id="23" >qwerty</ccc>
    <ccc id="24" ></ccc>
 </aaa>

अब, XPath का उपयोग कर:

//ccc[.='qwerty']

मुझे सही, अपेक्षित परिणाम मिले:

Name    Value
ccc     qwerty

अब, XPath का उपयोग कर:

//aaa[.='qwerty']

मुझे अप्रत्याशित परिणाम मिले:

Name    Value
aaa      
aaa     qwerty

और जो मुझे विशेष रूप से दिलचस्पी है, वह है कि उस मूल्य के साथ किसी भी तत्व का चयन कैसे करें

XPath:

//*[.='qwerty']

मुझे बहुत अजीब अप्रत्याशित परिणाम मिले:

Name    Value
aaa
bbb
ddd     qwerty
bbb     qwerty
aaa     qwerty
ccc     qwerty

क्या कोई इन परिणामों की व्याख्या कर सकता है, और अधिक अपेक्षित परिणाम प्राप्त करने के लिए मेरे XPath अभिव्यक्तियों को कैसे ठीक किया जाए?


1
क्योंकि XPath XPath . =से अलग है text() =। यह जानने के लिए कि स्ट्रिंग मानों से मेल खाते हुए टेक्स्ट नोड्स मिलते-जुलते हैं, क्यों।
kjhughes

जवाबों:


178

XPath कल्पना। किसी तत्व के स्ट्रिंग मान को उसके सभी पाठ-नोड वंशजों के संघटन (दस्तावेज़ क्रम में) के रूप में परिभाषित करता है

यह "अजीब परिणाम" बताता है।

"बेहतर" परिणाम नीचे दिए गए भावों का उपयोग करके प्राप्त किया जा सकता है:

//*[text() = 'qwerty']

उपरोक्त दस्तावेज़ में प्रत्येक तत्व का चयन करता है जिसमें कम से कम एक पाठ-नोड वाला बच्चा है जिसका मूल्य 'क्वर्टी' है।

//*[text() = 'qwerty' and not(text()[2])]

उपरोक्त दस्तावेज़ में प्रत्येक तत्व का चयन करता है जिसमें केवल एक पाठ-नोड बच्चा है और इसका मूल्य है: 'qwerty'।


3
@ हियरटग्रिक: खुशी है कि यह काम करता है। कैसे के बारे में स्वीकार / upvoting? XPath में text()संभावित नोड-परीक्षणों में से एक है, जिसका अर्थ है "यह एक पाठ नोड है?"। अन्य nodetests हैं comment(), processing-instruction(), या बस node()
दिमित्रे नोवत्चेव

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