2009-11-19 7 views
12

Prendendo questo esempio simplifed del mio XML:SelectSingleNode restituisce sempre 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> 

sto cercando di selezionare il nodo 'errore' con il metodo SelectSingleNode, tuttavia utilizzando il seguente codice restituisce sempre NULL?

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

Dalla ricerca che ho fatto questo è legato a spazi dei nomi, ma io semplicemente non può ottenere nulla al lavoro. Qualche consiglio?

risposta

21

Manca lo spazio dei nomi XML definito dal nodo <message> nella chiamata SelectSingleNode. Supponendo oss è un'istanza XmlDocument, è necessario fare questo:

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

Ma naturalmente! I weenies XML hanno molte risposte. –