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?

¿Fue útil?

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");

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top