2009-11-19 28 views
12

Tomando este ejemplo simplifed de mi XML:SelectSingleNode siempre devuelve un valor nulo?

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

Estoy tratando de seleccionar el nodo de 'error' usando el método SelectSingleNode, sin embargo usando el siguiente código siempre devuelve NULL?

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

De la investigación que he hecho esto está relacionado con los espacios de nombres, pero simplemente no puedo hacer que nada funcione. ¿Algún consejo?

Respuesta

21

Falta el espacio de nombres XML definido por el nodo <message> en su llamada SelectSingleNode. Suponiendo oss es una instancia XmlDocument, lo que necesita hacer esto:

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

Pero, por supuesto! Las salchichas XML tienen mucho que responder. –

Cuestiones relacionadas