2009-04-30 18 views
5

मैं एक XML दस्तावेज है कि एक संरचना है कि इस के समान दिखता है शामिल है के साथ काम कर रहा हूँ:SelectSingleNode वापस शून्य क्यों है?

<MT> 
    <Events> 
    <event id="1"> 
     <field name="blah" value="a_value" type="atype" /> 
     . 
     . 
     . 
    </event> 
    </Events> 
</MT> 

मैं वर्तमान में एक XML दस्तावेज में एक फ़ाइल से लोड हो रहा है कर रहा हूँ इस फैशन में:

XmlDocument xdoc = new XmlDocument(); 
xdoc.Load("somefile.xml"); //Successfully loads btw 

हालांकि मैं एक समस्या में और केवल इस एक विशेष दस्तावेज़ के साथ चल रहा हूँ जब मैं कोड की अगली पंक्ति चलाने का प्रयास:

मैं रिग पर हूँ एचटी ट्रैक अनुमान लगाकर कि यह 'आईडी' नामक एक विशेषता का उपयोग करने के साथ किसी समस्या के कारण शून्य हो रहा है या क्या मुझे कोड में कुछ याद आ रहा है?

उत्तर

9

मैं एक XML फ़ाइल

<MT> 
    <Events> 
    <event id="1"> 
     <field name="blah" value="a_value" type="atype" /> 
    </event> 
    </Events> 
</MT> 

और कोड

XmlDocument doc = new XmlDocument(); 
doc.Load(@"C:\test.xml"); 

XmlNode node = doc.SelectSingleNode("//event[@id='1']"); 

यह एक गैर-शून्य नोड रिटर्न की उम्मीद के रूप में उपयोग करते हुए इस दोहराने नहीं कर सकता।

अद्यतन

एक xmlns="example.org" को <MT> तत्व जोड़ने के बाद, मैं XPath के लिए एक नाम स्थान प्रबंधक कॉन्फ़िगर और घटना के लिए नाम स्थान का उपयोग करने के लिए किया था। कुछ कारणों से काम करने के लिए डिफ़ॉल्ट नेमस्पेस नहीं मिला।

XmlDocument doc = new XmlDocument(); 
doc.Load(@"D:\test.xml"); 

XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable); 
manager.AddNamespace("e", "http://example.org"); 

XmlNode node = doc.SelectSingleNode("//e:event[@id='1']", manager); 

एक बात मुझे जब इस काम करने के लिए प्राप्त करने की कोशिश उलझन में। XmlNamespaceManager को दस्तावेज़ से XmlNameTable क्यों चाहिए यदि यह पता लगाने के लिए कि इसमें कौन से नामस्थान हैं? जैसा कि, मुझे नेमटेबल और नामस्थान को परिभाषित करने की आवश्यकता क्यों है? अगर कोई जानता है कि कोई छोटी टिप्पणी छोड़ सकता है तो मैं सराहना करता हूं।

+0

मेरे अपने प्रश्न का उत्तर दें। XmlNameTable का उपयोग स्ट्रिंग तुलना को अनुकूलित करने के लिए किया जाता है और मुझे लगता है कि आप XmlNamespaceManager को एक मौजूदा नाम तालिका दे सकते हैं XmlDocument तत्वों के साथ तेज़ तुलना की अनुमति देता है क्योंकि ये नामटेबल साझा करते हैं। –

+0

आपका अपडेट समझ में आता है। मैं एक्सएमएल का एक संक्षिप्त रूप स्थापित करने की कोशिश कर रहा था, और नामस्थान पोस्ट करना भूल गया था। कोशिश करने और इसे समझने के लिए अतिरिक्त समय लेने के लिए धन्यवाद। एक बार जब मैंने मूल एक्सएमएल से नेमस्पेस हटा दिया, तो सब कुछ इस तरह काम करता है। निश्चित रूप से System.Xml नामस्थान के अधिक अध्ययन के लायक है। –

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