XmlDocument.SelectSingleNode devuelve un valor nulo para el nodo raíz
-
19-09-2019 - |
Pregunta
Tengo varios archivos XML cuyo postfix no se .xml, pero .Componente Ahora quiero manejarlos en el programa C #, pero parece que la c # no puede incluso encontrar el elemento raíz de estos archivos XML
var doc = new XmlDocument();
doc.Load(path); // MG: edited to Load based on comment
XmlNode root = doc.SelectSingleNode("rootNodename");
Parece que la raíz es nula, ¿Cómo debería hacer frente a esto?
Solución
Dado que usted haya resuelto la confusión Load
/ LoadXml
, espero que el tema es los espacios de nombres; tienes ejemplo xml? Manejo de XML con espacios de nombres se pone ... "diversión" -P
Por ejemplo:
XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<test xmlns='myFunkyUri' value='abc'/>");
// wrong; no namespace consideration
XmlElement root = (XmlElement)doc.SelectSingleNode("test");
Console.WriteLine(root == null ? "(no root)" : root.GetAttribute("value"));
// right
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("x", "myFunkyUri"); // x is my alias for myFunkyUri
root = (XmlElement)doc.SelectSingleNode("x:test", nsmgr);
Console.WriteLine(root == null ? "(no root)" : root.GetAttribute("value"));
Tenga en cuenta que incluso si su xml declara alias XML, es posible que aún tenga que volver a declarar para el espacio de nombres-manager.
Otros consejos
LoadXml toma una cadena XML, no una ruta de archivo. Trate de carga en su lugar. La carga no se preocupa por la extensión de archivo.
Aquí hay un enlace a la documention de carga: http://msdn.microsoft.com/en- es / library / system.xml.xmldocument.load.aspx
Yo estaba teniendo este problema intente esto: Poner un guión delante de RootNodeName En lugar de esto: raíz XmlNode = doc.SelectSingleNode ( "RootNodeName");
Haga lo siguiente: raíz XmlNode = doc.SelectSingleNode ( "/ RootNodeName");