Tengo algo de código que se está volviendo un XNode a mí que se parece a esto:

<File>
  <Component>Main</Component>
  <Path>C:\Main\</Path>
  <FileName>main.txt</FileName>
</File>

Necesito tener un poco de C# código que va a ser capaz de sacar el valor de la Ruta, por ejemplo (C:\Main). Sé que si yo estaba usando un nodo XML que yo podría hacer algo como esto:

String filePath = xmlNode["Path"].InnerText;

¿Alguien sabe cuál es el equivalente sería un XNode? Cualquier ayuda se agradece mucho!

6 Comentarios

  1. 46

    ¿Han a tener que devolver un XNode en lugar de un XElement? Con un XElement es más simple que con un XNode:

    string filePath = fileElement.Element("Path").Value;

    Que se encuentra el primera Path elemento, y se lanzará una NullReferenceException si no hay ninguna. Una alternativa si usted es feliz de tener null si no hay ningún sería:

    string filePath = (string) fileElement.Element("Path");

    Si realmente estás atascado con XNode, ya sea que usted tiene que echar a XElement o posiblemente XContainer.

    • Im que consigue excepción cuando tratando de lanzar a XElement. ¿Tiene una solución para eso? Gracias de antemano
    • No sin saber más del contexto, no. Te sugiero hacer una nueva pregunta con un ejemplo.
    • XElement xelm = (XElement) XNodeObject; return excepción
    • Que no es una nueva pregunta con un ejemplo. Es un comentario con una sola instrucción que no es suficiente contexto para saber lo que está pasando.
    • Voy a publicar una más pregunta específica en pocos minutos.
    • Esto sólo funciona si el XNode es un XElement. Puede ser un montón de otras cosas diferentes. Usted puede ver mi respuesta.
    • Sí, hago bastante claro en mi respuesta – especialmente la última línea.

  2. 8

    Usted puede convertir su XNode en XElement para el acceso a sus propiedades, mi ejemplo:

    XNode lastNode = myXElement.LastNode;
    
    //if I want to get the 'ID' attribute
    string id = (lastNode as XElement).Attribute("ID").Value;
    • No downcasting malo?
    • Ahhh, gracias. Ahora veo XElement funcionarán igual de bien, sin embargo.
    • Con el ejemplo de XML como el XNode no está más interesado en los Elementos bajo el nodo no los Atributos? para más como string path = (lastNode como XElement).Elemento(«Path»).Valor;
  3. 0

    Usted puede usar este:

    XElement xtr = XElement.Load("path/to/your/xml/file");
    String filePath = xtr.Descendants("Path").Single().Value;
  4. 0

    Si Sistema de importación.Xml.XPath puede utilizar XPathSelectElement como este en el XNode objeto:

    String component = xmlNode.XPathSelectElement("Component");
    String path = xmlNode.XPathSelectElement("Path");
    String fileName = xmlNode.XPathSelectElement("FileName");
  5. 0

    Casting XNode a XElement obras para el elemento individual para recuperar su valor o el valor de los atributos. Pero usted no será capaz de utilizar myXelement.Elementos(«XXX») para obtener elementos anidados. Para que se puede usar xmlNode.Los nodos().

    Esto debería funcionar:

    var nodes = xmlNode.Nodes();//Get all nodes under 'File'
    var fileNameNode = nodes.Where(el => ((XElement)el).Name.LocalName == "FileName")
    .FirstOrDefault();
    string filePath = ((XElement)fileNameNode).Value;
  6. 0

    Depende de lo que convcrete objetos es el resumen XNode. De XNode Clase:

    XNode es un resumen clase base común para los siguientes tipos:
    XComment
    XContainer: puede ser XDocument o XElement
    XDocumentType
    XProcessingInstruction
    XText

    Entonces usted necesita para comprobar si se puede convertir a un XDocument o un XElement, y utilizar sus métodos, o el uso de LINQ to XML:

    Por ejemplo:

Dejar respuesta

Please enter your comment!
Please enter your name here