none
como puedo abrir los archivos de xml dentro de un ciclo RRS feed

  • Pregunta

  • Tengo un problema que no encuentro entre todos los post nada completo.

    digamos que la situacion es esta

    <?xml version="1.0"?>

    <Familia>

    <Padre Name="Alejandro" Size="180">

    <Hijo Name="alberto" age="12" />

    <hijo Name="Erick" age="10" />

    </padre>

    <Padre Name="Raul" Size="200">

    <Hijo Name="Emmanuel" age="18" />

    </padre>

    </familia>

    solo es un ejemplo.. pero la situacion es que quiero saber como obtener los datos del hijo debido a que solo puedo obtener los del padre... y en dado caso de que en que se sean varios hijos? 

    Espero su respuesta.

    jueves, 6 de marzo de 2014 18:59

Respuestas

  • Puedes usar cualquiera de las técnicas de manipulación de XML. Por ejemplo, si estás cargando en XML en una variable de tipo XmlDocument, puedes usar su método SelectNodes con una sentencia XPATH que busque los hijos:

    XmlDocument doc = new XmlDocument();
    doc.Load(....);
    XmlNodeCollection hijos = doc.SelectNodes("//Padre[@Name='Alejandro']/Hijo");
    foreach (XmlNode hijo in hijos)
    {
        //...
    }

    • Marcado como respuesta denegal martes, 11 de marzo de 2014 19:11
    viernes, 7 de marzo de 2014 7:52

Todas las respuestas

  • Puedes usar cualquiera de las técnicas de manipulación de XML. Por ejemplo, si estás cargando en XML en una variable de tipo XmlDocument, puedes usar su método SelectNodes con una sentencia XPATH que busque los hijos:

    XmlDocument doc = new XmlDocument();
    doc.Load(....);
    XmlNodeCollection hijos = doc.SelectNodes("//Padre[@Name='Alejandro']/Hijo");
    foreach (XmlNode hijo in hijos)
    {
        //...
    }

    • Marcado como respuesta denegal martes, 11 de marzo de 2014 19:11
    viernes, 7 de marzo de 2014 7:52
  • Hola amigo,

    Yo te daría una solución distinta a la que da Alberto, y sería que uses LINQToXML, que para mi es la manera más eficiente y sencilla de trabajar con documentos xml. Te pongo un ejemplo para tu xml de ejemplo, valga la redundancia:

    XDocument doc = XDocument.Load("XMLFile1.xml");
    
    IEnumerable<XElement> nodes = doc.Descendants("Hijo");
    
    IEnumerable<XAttribute> ages = nodes.Select(x => x.Attributes("age"));

    Como puedes ver, en la primera sentencia se carga el xml, en la segunda, se obtienen todos los elementos con el nombre hijo, y en la tercera se obtiene una colección de atributos age (en el ejemplo, las edades están sin relacionar con su "Hijo", pero puedes hacerlo tu, yo solo te lo he puesto de manera simple para que veas como obtener elementos y atributos).

    Así que, como puedes ver con Linq puedes obtener cualquier tipo de elemento y/o atributo con poco esfuerzo y de forma muy eficiente.

    Espero que te sirva, salu2!!

    Editado: para utilizar linq tienes que añadir using System.Xml.Linq;, y para obtener los valores de los atributos, solo tienes que utilizar la propiedad .Value


    Jose Alberto Marti



    • Editado Jose Alberto Marti viernes, 7 de marzo de 2014 8:51
    • Propuesto como respuesta Hugonne viernes, 14 de marzo de 2014 14:46
    viernes, 7 de marzo de 2014 8:47
  • si use una forma parecida.. ciclo dentro de otro ciclo... gracias
    martes, 11 de marzo de 2014 19:09
  • en este caso queria saber los datos del padre...y despues los datos de sus hijos... tomar un ciclo.
    martes, 11 de marzo de 2014 19:10