2009-02-01 7 views
6

मैं प्रोग्राम पर एटम फ़ीड को पार्स करने की कोशिश कर रहा हूं। मेरे पास परमाणु एक्सएमएल एक स्ट्रिंग के रूप में डाउनलोड किया गया है। मैं एक्सएमएल को XmlDocument में लोड कर सकता हूं। हालांकि, मैं XPath का उपयोग कर दस्तावेज़ को पार नहीं कर सकता। जब भी मैं कोशिश करता हूं, मुझे null मिलता है।XPath का उपयोग कर एटम एक्सएमएल दस्तावेज़ से कोई नोड्स चयनित नहीं है?

मैं एक परीक्षण के रूप में इस एटम फ़ीड का उपयोग कर रहे: http://steve-yegge.blogspot.com/feeds/posts/default

कॉलिंग SelectSingleNode() हमेशा null देता है, जब मैं "/" का उपयोग के लिए छोड़कर। यहाँ क्या कर रहा है मैं अभी कोशिश कर रहा हूँ:

using (WebClient wc = new WebClient()) 
{ 
    string xml = wc.DownloadString("http://steve-yegge.blogspot.com/feeds/posts/default"); 
    XmlNamespaceManager nsMngr = new XmlNamespaceManager(new NameTable()); 
    nsMngr.AddNamespace(string.Empty, "http://www.w3.org/2005/Atom"); 
    nsMngr.AddNamespace("app", "http://purl.org/atom/app#"); 
    XmlDocument atom = new XmlDocument(); 
    atom.LoadXml(xml); 
    XmlNode node = atom.SelectSingleNode("//entry/link/app:edited", nsMngr); 
} 

मैंने सोचा कि यह मेरे XPath की वजह से हो सकता है, तो मैं भी रूट नोड का एक सरल क्वेरी की कोशिश की है के बाद से मैं जानता था कि जड़ से काम करना चाहिए:

// I've tried both with & without the nsMngr declared above 
XmlNode node = atom.SelectSingleNode("/feed"); 

कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, ऐसा लगता है कि यह कुछ भी नहीं चुन सकता है। जाहिर है, मुझे कुछ याद आ रहा है, मैं सिर्फ यह नहीं समझ सकता कि क्या। इस एटम फ़ीड पर XPath काम करने के लिए मुझे क्या करना है?

संपादित

हालांकि इस सवाल का एक जवाब है, मुझे पता चला इस सवाल का एक लगभग सटीक नकल है: SelectNodes not working on stackoverflow feed

+0

के संभावित डुप्लिकेट [stackoverflow फ़ीड पर काम नहीं कर SelectNodes] (http://stackoverflow.com/questions/24734/selectnodes-not-working-on-stackoverflow-feed) –

उत्तर

8

सी # कार्यान्वयन डिफ़ॉल्ट नामस्थान अनुमति दे सकता है (मैं नहीं जानता), XPath 1.0 spec नहीं करता है। तो, "एटम" अपने स्वयं उपसर्ग दे:

nsMngr.AddNamespace("atom", "http://www.w3.org/2005/Atom"); 

और उचित रूप से अपने XPath बदलने के लिए: किसी भी 'त्रुटियाँ/त्रुटि' नोड्स के लिए एक स्ट्रिंग और देखने से

XmlNode node = atom.SelectSingleNode("//atom:entry/atom:link/app:edited", nsMngr); 
0

लोड एक्सएमएल।

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xmlResult);    
XmlNamespaceManager nm = new XmlNamespaceManager(xmlDoc.NameTable); 
nm.AddNamespace("ns", "http://somedomain.com/namespace1/2"); //ns - any name, make sure it is same in the below line 

XmlNodeList errors = xmlDoc.SelectNodes("/ns:*//ns:Errors/ns:Error", nm);  

-Mathulan

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