2009-11-19 6 views
12

Biorąc to simplifed przykład mój XML:SelectSingleNode zawsze zwraca wartość null?

<?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> 

próbuję wybrać węzeł „błędu” przy użyciu metody SelectSingleNode jednak stosując następujący kod zawsze zwraca NULL?

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

Z badań Zrobiłem to jest związane z przestrzeniami nazw, ale ja po prostu nie można dostać coś do pracy. Jakakolwiek rada?

Odpowiedz

21

Brakuje obszaru nazw XML zdefiniowanego przez węzeł <message> w swoim wywołaniu SelectSingleNode. Zakładając oss jest instancją XmlDocument, trzeba to zrobić:

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

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

Marca

+0

Ale oczywiście! XML weenies mają wiele odpowiedzi. –