2009-02-17 7 views
15
<Document> 
    <A> 
    <B> 
     <C></C> 
    </B> 
    </A> 
    <E> 
    <F> 
    <C></C> 
    </F> 
    <G> 
    <C></C> 
    </G> 
</E> 
</Document> 

मैं XPath क्वेरी का उपयोग कर एक XmlDocument में ऊपर एक्सएमएल लोड और एक पर एक SelectSingleNode करते हैं // सीXPath SelectNodes

 
XmlNode oNode = oDocument.SelectSingleNode("E"); 
XmlNodeList oNodeList = oNode.SelectNodes("//C"); 

कारण है कि यह बी के तहत जब से नोड्स लौट पड़ता कि मैं ऐसा होने की उम्मीद करता हूं कि यह केवल ई

के तहत नोड्स लौटाएगा?

संपादित करें: मैं इसे केवल उस नोड से कैसे वापस कर दूंगा?

उत्तर

22

बस: चयनित 0 नोड के समान दस्तावेज़ में एक अग्रणी // का अर्थ है "किसी भी स्तर पर"।

से

spec:

  • // पैरा दस्तावेज़ जड़ के सभी पैरा वंश का चयन करता है और इस प्रकार संदर्भ नोड के रूप में एक ही दस्तावेज़ में सभी पैरा तत्वों
  • .//para पैरा का चयन करता है का चयन करता है संदर्भ नोड
11

.//C निर्दिष्ट करना जो आप चाहते हैं उसे प्राप्त करेंगे, अन्यथा, XPath वर्तमान नोड की बजाय दस्तावेज़ रूट से शुरू होता है।/

// /वंशज या स्वयं :: नोड के लिए कम है():

भ्रम के रूप में निम्नानुसार XPath standard से // की परिभाषा में है। उदाहरण के लिए, // पैरा /वंश-या-स्वयं :: नोड()/बच्चे :: पैरा के लिए छोटा है और इसलिए दस्तावेज़ में किसी भी पैरा तत्व का चयन करेगा (यहां तक ​​कि पैरा तत्व भी एक दस्तावेज़ तत्व है दस्तावेज़ पैरा नोड रूट नोड का एक बच्चा है के बाद से // पैरा द्वारा का चयन किया जाएगा); div // पैरा div/descendant-or-self :: नोड()/child :: पैरा के लिए छोटा है और इसलिए सभी पैरा div बच्चों के वंशजों का चयन करेगा।

क्योंकि /descendant-or-self::node()/ के लिए छोटा है, यह दस्तावेज़ स्तर पर तब तक शुरू होता है जब तक कि आप शुरुआत में नोड निर्दिष्ट न करें।

+0

नहीं, कल्पना कहती है कि "//" दस्तावेज़ रूट "है, और" .// "संदर्भ नोड का है। कार्यान्वयन सही है। –

+0

डब्ल्यू 3 स्कूल रेफ रे: ध्यान से पढ़ें: "वर्तमान नोड से दस्तावेज़ में" - संदर्भ नोड का उपयोग दस्तावेज़ (केवल) प्राप्त करने के लिए किया जाता है; तो पूरा दस्तावेज़ स्कैन किया गया है। –

+0

हां, मैंने इसे XPath मानक का संदर्भ देने के लिए अपडेट किया है और जहां भ्रम है, वहां हाइलाइट किया गया है। धन्यवाद। :) –

6

//C पूरे दस्तावेज में सभी सी नोड्स है

/E//C ई के तहत केवल सी नोड्स

/C होगा केवल रूट सी नोड

होगा xpath syntax reference

3

में देखें XPATH Specification आपको 2 से कम मिलेगा।5 निम्नलिखित बयान:

// पैरा का चयन करता है दस्तावेज़ जड़ के सभी पैरा वंश और इस प्रकार संदर्भ नोड

व्यवहार यानी के रूप में एक ही दस्तावेज़ में सभी पैरा तत्वों का चयन करता है आप निरीक्षण मान्य है। आपको कुछ करना चाहिए "/ ई // सी"

+0

क्या होगा अगर मुझे नहीं पता कि गहरे सी कितने नोड्स थे? यह अच्छी तरह से/ई/डी/जी/सी हो सकता है? –

+0

@ गॉर्डन - "/ ई // सी" ई और सी के बीच किसी भी स्तर के साथ सामना करेगा। –