2009-11-19 20 views
12

Einnahme dieses simplifed Beispiel meiner XML:SelectSingleNode gibt immer null zurück?

<?xml version="1.0"?> 
<message xmlns="http://www.mydomain.com/MyDataFeed" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mydomain.com/MyDataFeed https://secure.mydomain/MyDataFeed/myDataFeed.xsd" requestId="13898" status="1"> 
<error>Invalid Login</error> 
</message> 

Ich versuche, den ‚Fehler‘ Knoten mit SelectSingleNode Methode zu wählen, jedoch den folgenden Code verwenden es immer NULL zurückgibt?

XmlNode errorNode = oss.SelectSingleNode("/message/error"); 
if (errorNode != null) 
    Console.Writeline("There is an error"); 

Von der Forschung ich dies getan haben, ist zu Namespace verwandt, aber ich kann einfach nichts zu arbeiten. Irgendein Rat?

Antwort

21

Ihnen fehlt der XML-Namespace, der vom <message>-Knoten in Ihrem SelectSingleNode-Aufruf definiert wird. Unter der Annahme, oss ist eine XmlDocument Instanz, müssen Sie dies tun:

XmlNamespaceManager nsMgr = new XmlNamespaceManager(oss.NameTable); 
nsMgr.AddNamespace("ns", "http://www.mydomain.com/MyDataFeed"); 

XmlNode errorNode = oss.SelectSingleNode("/ns:message/ns:error", nsMgr); 

Marc

+0

Aber natürlich! Die XML-Weenies haben eine Menge zu verantworten. –

Verwandte Themen