Thursday, 15 April 2010

c# - XElement.CreateNavigator vs XDocument.CreateNavigator -


class = "post-text" itemprop = "text">

इस XML फ़ाइल को देखते हुए:

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "utf-8" & gt; & LT; विन्यास & gt; & LT; स्टार्टअप & gt; & Lt; समर्थित क्रम संस्करण = "v4.0" sku = ".NETFramework, संस्करण = v4.5" / & gt; & Lt; / स्टार्टअप & gt; & LT; mySection & gt; & Lt; नेटवर्कशेयर फ़ोल्डर = "\\ myFolder \ v1" / & gt; & Lt; / mySection & gt; & Lt; / विन्यास & gt;   

निम्न कोड काम नहीं करता (रिक्त आउटपुट देता है):

  var नेविगेटर = XElement.Load (कॉन्फ़िगरेशन प्रबंधक। OpenExeConfiguration (ConfigurationUserLevel.None) .FilePath) .CreateNavigator (); Var q = navigator.Select ("/ कॉन्फ़िगरेशन / mySection / NetworkShare"); यदि (q.Count == 1) // q.Count 0 है (q.MoveNext ()); कंसोल.दूषित लाइन (q.Current.GetAttribute ("फ़ोल्डर", नेविगेटर .फिरफिक्स)); }   

लेकिन यह कोड काम करता है (सही तरीके से फ़ोल्डर को प्रिंट करता है):

  var नेविगेटर = XDocument.Load (कॉन्फ़िगरेशन प्रबंधक। OpenExeConfiguration (ConfigurationUserLevel.None) .FilePath ) .CreateNavigator (); Var q = navigator.Select ("/ कॉन्फ़िगरेशन / mySection / NetworkShare"); यदि (q.Count == 1) // q.Count 1 {q.MoveNext () है; कंसोल.दूषित लाइन (q.Current.GetAttribute ("फ़ोल्डर", नेविगेटर .फिरफिक्स)); }   

क्या यह नेट में एक बग है?

समस्या यह है कि XDocument पर एक प्रश्न किसी XElement से भिन्न संदर्भ में हैं एक XDocument के लिए, यह संपूर्ण दस्तावेज़ का प्रतिनिधित्व करता है यह बच्चा मूल तत्व है ( कॉन्फ़िगरेशन इस मामले में) XElement के लिए, यह तत्व का प्रतिनिधित्व करता है।

इसलिए जब आप फ़ाइल को XElement.Load () के माध्यम से लोड करते हैं, तो प्रश्न उस के सापेक्ष होंगे तत्व। XDocument.Load () के माध्यम से फाइल को लोड करते हुए, क्वेरी दस्तावेज के सापेक्ष होंगे।

इसलिए जब आपने / configuration /...//> क्योंकि XElement के लिए आप वर्तमान में कॉन्फ़िगरेशन तत्व में हैं, स्पष्ट रूप से कोई कॉन्फ़िगरेशन बच्चा नहीं है, इसलिए क्वेरी की पैदावार कुछ भी नहीं है दूसरी ओर, XDocument के लिए, यह अपेक्षा के अनुरूप काम करता है।

No comments:

Post a Comment