2011-10-31 14 views
6

इस तरह के एक सरल प्रश्न के साथ आपको परेशान करने के क्षमा करें, लेकिन मैं यहाँ एक घंटे के बाद से अटक कर रहा हूँ:XmlElement.SelectNodes (..) - कुछ भी नहीं मिला .. मदद?

<?xml version="1.0" encoding="utf-8"?> 
<aaa xmlns="http://blabla.com/xmlschema/v1"> 

    <bbb> 
    <ccc>Foo</ccc> 
    </bbb> 

    <ddd x="y" /> 
    <ddd x="xx" /> 
    <ddd x="z" /> 

</aaa> 

मैं उपयोग करने के लिए कोशिश कर रहा हूँ:

मैं एक xml फ़ाइल है कि कुछ इस तरह दिखता है तत्वों 'ddd' इस तरह:

var doc = new XmlDocument(); 
doc.Load("example.xml"); 
foreach (XmlNode dddNode in doc.DocumentElement.SelectNodes("//ddd")) 
{ 
    // do something 
    Console.WriteLine(dddNode.Attributes["x"].Value); 
} 

रनटाइम पर, क्योंकि मैं किसी भी नोड्स .SelectNodes विधि से वापस नहीं मिलता है foreach पाश को छोड़ दिया है। मैंने लूप से पहले तोड़ दिया और इनरएक्सएमएल पर एक नज़र डाली, यह ठीक दिखता है, और मैंने XPaths (जैसे "// bbb" या "/ aaa/ddd") की सभी तरह की कोशिश की, लेकिन केवल "/" वापस नहीं आ रहा है शून्य।

यह सटीक कोड मेरे लिए पहले काम करता था, अब यह नहीं करता है। मुझे एएए टैग में उस नेमस्पेस घोषणा के साथ कुछ संदेह है, लेकिन मुझे पता नहीं लगा कि इसका कारण क्यों होना चाहिए। या .. क्या आप कुछ भी देख सकते हैं जो मुझे याद आ रही है?

उत्तर

10

यह xml-namespaces है। कोई ddd नहीं है। हालांकि, x:ddd है जहां xhttp://blabla.com/xmlschema/v1 पर आपका उपनाम है। आप नामस्थान के साथ परीक्षण करने के लिए की आवश्यकता होगी - उदाहरण के लिए:

var nsmgr = new XmlNamespaceManager(doc.NameTable); 
nsmgr.AddNamespace("x", "http://blabla.com/xmlschema/v1"); 
var nodes = doc.DocumentElement.SelectNodes("//x:ddd", nsmgr); 
// nodes has 3 nodes 

नोट में ऊपर मनमाना है x; सुविधा के अलावा x में कोई महत्व नहीं है।

यह (बल्कि बेढंगेपन) नाम स्थान (या एक उपनाम, जैसा कि ऊपर) सभी अपने xPath अभिव्यक्ति की में जोड़ने का मतलब है।

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