Considere este documento XML simple. El XML serializado que se muestra aquí es el resultado de un XmlSerializer de un objeto POCO complejo cuyo esquema no tengo control.SelectSingleNode que devuelve nulo para una buena ruta de nodo conocida xml con XPath
<My_RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="">
<id root="2.16.840.1.113883.3.51.1.1.1" extension="someIdentifier" xmlns="urn:hl7-org:v3" />
<creationTime xsi:nil="true" xmlns="urn:hl7-org:v3" />
</My_RootNode>
El objetivo es extraer el valor del atributo de extensión en el nodo id. En este caso, estamos utilizando el método SelectSingleNode, y dada una expresión XPath como tal:
XmlNode idNode = myXmlDoc.SelectSingleNode("/My_RootNode/id");
//idNode is evaluated to null at this point in the debugger!
string msgID = idNode.Attributes.GetNamedItem("extension").Value;
El problema es que el método SelectSingleNode
devuelve null para la expresión XPath dada.
Pregunta: alguna idea sobre la corrección de esta consulta XPath, o por qué este método llama a la expresión + XPath devolvería un valor nulo? Tal vez los espacios de nombres son parte del problema?
Lo primero que debe verificar es si el documento XML se ha cargado correctamente. Puedo ver un atributo xmlns vacío al final del nodo raíz, ¿es así? – Oded
@Oded: Correcto, estamos viendo un XmlDocument que ha cargado la salida de cadena de un XmlSerializer. –
@pcampbell: ¿es este un documento grande (HL7!)? Si es así, entonces puede intentar serializar directamente en XmlDocument. Si quieres una muestra de eso, házmelo saber. –