2009-01-17 11 views
17

मैं कुछ एक्सएमएल को इस तरह से पार्स कर रहा हूं:केवल XPath के साथ पहला उदाहरण चुनें?

<root> 
    <some_gunk/> 
    <dupe_node> 
     ... 
     stuff I want 
     ... 
    </dupe_node> 
    <bits_and_pieces/> 
    <other_gunk/> 
    <dupe_node> 
     ... 
     stuff I don't want 
     ... 
    </dupe_node> 
    <more_gunk/> 
</root> 

'//dupe_node' का एक XPath मुझे dupe_node के दो उदाहरणों के साथ खेलने के लिए देगा। मैं केवल पहले को पार करना चाहता हूं। क्या मैं इसे XPath के साथ कर सकता हूं?

उत्तर

39
/descendant::dupe_node[1] 

//dupe_node[1] आम तौर पर गलत है, हालांकि यह इस विशेष मामले में एक समान परिणाम पैदा करता है: आप अपने ब्राउज़र में बातें की कोशिश करने के लिए इस उपकरण का उपयोग कर सकते हैं। See docs:

स्थान पथ // पैरा [1] का मतलब स्थान पथ/वंशज :: पैरा [1] जैसा नहीं है। उत्तरार्द्ध पहले वंशज पैरा तत्व का चयन करता है; पूर्व सभी अभिजात वर्ग के तत्वों का चयन करता है जो उनके माता-पिता के पहले पैरा बच्चे हैं। ,

<foo> 
    <bar/> 
    <foo> 
     <bar/> 
    </foo> 
</foo> 

//bar[1] दो नोड्स का उत्पादन करेगा, क्योंकि दोनों सलाखों के अपने-अपने माता-पिता के पहले बच्चे हैं:

निम्नलिखित एक्सएमएल को देखते हुए।

/descendant::bar[1] केवल एक नोड देगा, जो दस्तावेज़ में सभी बारों में से पहला है।

+0

तो यदि आप पहले नोड को वंश या स्वयं चाहते हैं तो आप इसे कैसे लिखते हैं?/वंशज :: dupe_node [1] स्वयं अधिकार को शामिल नहीं करता है? – xr280xr

4

// dupe_node [1] इस मामले में 1, नहीं 0 से

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