2009-07-17 10 views
11

यह एक आसान होना चाहिए लेकिन यह मुझे परेशानी दे रहा है।एक्सपैथ केवल नोड्स का चयन करने के लिए जहां बच्चे तत्व मौजूद हैं?

<root> 
    <a> 
    <b/> 
    </a> 
    <a/> 
</root> 

मैं एक xpath एक्सप्रेशन, जो केवल उन खाली "एक" तत्व है, यानी लोगों को बच्चे तत्व देता है तैयार करने के लिए कोशिश कर रहा हूँ: इस संरचना को देखते हुए। इसलिए मैं चाहता हूं कि "ए" का पहला उदाहरण लौटा, लेकिन दूसरा नहीं।

अभी तक मेरे पास "/ root/a/self :: *" है लेकिन यह मुझे दोनों को वापस कर रहा है।

+2

मैं भी इस में पाया गया कि काम करता है: /रूट/ए [बच्चे :: *] लेकिन मैं एड्रियन क्रेडिट को ऐसे उत्तर के लिए दूंगा जो काम करता है! :) –

उत्तर

12
/root/a[count(*)&gt;0] 

चाइल्ड नोड के किसी भी प्रकार के साथ किसी भी 'एक' नोड दे देंगे

+5

बस एक अतिरिक्त बिंदु के रूप में, आप गिनती (बी) का उपयोग करके विशिष्ट हो सकते हैं कि आप किस बच्चे नोड्स को गिनना चाहते हैं। –

6
/root/a[count(*)>0] 
+0

मुझे लगता है कि एड्रियन एन्कोडिंग की आवश्यकता के बारे में सही है। –

+3

केवल अगर आप इसे एक XML फ़ाइल में रखना चाहते हैं (उदा। एक एक्सएसएलटी स्क्रिप्ट)। फिर भी, यह सिर्फ एक भंडारण विवरण है, मुझे पूरा यकीन है कि XPath spec ">" का उपयोग करता है :) –

3

यह एक काम करता है

/root/a[*] 

या यहाँ तक कि

//a[*] 
+0

या यदि आप केवल "बी" नाम के साथ बाल तत्वों की परवाह करते हैं: '/ root/a [b]' – Timothy

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