एक्सपीथ एलेमेंट वैल्यू बाय एलीमेंट वैल्यू


194

मेरे पास XML है।

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee id="3">
        <age>40</age>
        <name>Tom</name>
        <gender>Male</gender>
        <role>Manager</role>
    </Employee>
    <Employee id="4">
        <age>25</age>
        <name>Meghna</name>
        <gender>Female</gender>
        <role>Manager</role>
    </Employee>
</Employees>

मैं id = "4" के साथ कर्मचारी तत्व का चयन करना चाहता हूं।

मैं XPath एक्सप्रेशन के नीचे उपयोग कर रहा हूं जो कुछ भी वापस नहीं कर रहा है।

//Employee/[@id='4']/text()

मैंने इसे http://chris.photobooks.com/xml/default.htm पर चेक किया और यह अमान्य xpath कहता है, सुनिश्चित नहीं है कि समस्या कहां है।

जवाबों:


276

आपको /इससे पहले हटाने की आवश्यकता है [। विधेय (भागों में [ ]) में उनके तुरंत पहले स्लैश नहीं होना चाहिए। इसके अलावा, कर्मचारी तत्व का चयन करने के लिए, आपको /text()अंत में छोड़ देना चाहिए या अन्यथा आप कर्मचारी तत्व के तहत तुरंत व्हाट्सएप टेक्स्ट मान का चयन करेंगे।

//Employee[@id='4']

संपादित करें: जैसा कि जेन्स टिप्पणियों में बताते हैं, //बहुत धीमा हो सकता है क्योंकि यह नोड्स के मिलान के लिए पूरे दस्तावेज़ को खोजता है। यदि आप जिस दस्तावेज़ के साथ काम कर रहे हैं, उसकी संरचना सुसंगत होने वाली है, तो आप संभवतः पूर्ण पथ का उपयोग कर रहे हैं, उदाहरण के लिए:

/Employees/Employee[@id='4']

3
ध्यान दें कि दस्तावेज़ के सभी नोड्स का //चयन और खोज करता है जो धीमा हो सकता है। इसके बजाय, यदि दस्तावेज़ की संरचना ज्ञात है, तो एक उचित पथ का उपयोग करें, जैसे नीचे गिल्स के उत्तर में सुझाया गया है ।
जेन्स

@ जेन्स हाँ, यह बिल्कुल सच है। मैंने अपना उत्तर एक परिशिष्ट जोड़ने के लिए संपादित किया है।
JLRishe

13

एक अनुसरण के रूप में, आप "किसी विशेष विशेषता वाले सभी नोड्स" का चयन कर सकते हैं:

//*[@id='4']

12

ऐसा करने का प्रयास करें:

/Employees/Employee[@id=4]/*/text()

आईडी की तलाश करने से पहले xmllint मेमोरी में पूरी xml फाइल लोड करता है? मेरे पास ४६ जीबी की एक xml फ़ाइल है और मैं इसमें आईडी की तलाश कर रहा हूं
हानी गोक

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