none
Como agregar un XElement nuevo a un archivo xml creado? RRS feed

  • Pregunta

  • Hola que tal este es el archivo xml creado:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <!--Creating an XML Tree using LINQ to XML-->
    <Tiempos>
      <Tiempo codigo="1">
        <tiempoSeg>0</tiempoSeg>
        <fecha>27-11-2017</fecha>
      </Tiempo>
    </Tiempos>

    ahora quiero que se agreguen automáticamente registros, solo necesito saber como agregar uno y lo demás ya lo puedo hacer, quiero que quede asi:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <!--Creating an XML Tree using LINQ to XML-->
    <Tiempos>
      <Tiempo codigo="1">
        <tiempoSeg>0</tiempoSeg>
        <fecha>27-11-2017</fecha>
      </Tiempo>

      <Tiempo codigo="2">
        <tiempoSeg>0</tiempoSeg>
        <fecha>29-11-2017</fecha>
      </Tiempo>

    </Tiempos>

    aquí esta lo que estado haciendo pero en la ultima parte no agrega tal vez algo falta:

                        

    XElement newDocXML = XElement.Load("DBTiempo.xml");

                        XElement newTiempo = new XElement("Tiempo", new XAttribute("codigo", (maxNr + 1)),
                            new XElement("tiempoSeg", _tiempoTrabSeg),
                            new XElement("fecha", _fechaActual.ToString("dd-MM-yyyy")));

                        newDocXML.Element("Tiempo").Add(newTiempo);

    Agradezco su apoyo. Gracias anticipadamente.

    miércoles, 29 de noviembre de 2017 18:13

Respuestas

  • "Tiempos" es el XElement newDocXML

    Quieres agregar elementos secundarios a newDocXML

    Así

    // cargas
    XElement newDocXML = XElement.Load("DBTiempo.xml");
    
    // instancias y agregas el o los elementos
    XElement newTiempo = new XElement("Tiempo", new XAttribute("codigo", (maxNr + 1)),
    new XElement("tiempoSeg", _tiempoTrabSeg),
    new XElement("fecha", _fechaActual.ToString("dd-MM-yyyy")));
    
    newDocXML.Add(newTiempo);
    
    
    // finalmente, guardas
    newDocXML.Save("DBTiempo.xml");
    

    • Marcado como respuesta soy_binario miércoles, 29 de noviembre de 2017 19:40
    miércoles, 29 de noviembre de 2017 19:28

Todas las respuestas

  • hola

    y si usas

    newDocXML.Element("Tiempos").Add(newTiempo);

    o sea basicamente agregas sobre el elemento que representa la coleccion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 29 de noviembre de 2017 18:58
  • "Tiempos" es el XElement newDocXML

    Quieres agregar elementos secundarios a newDocXML

    Así

    // cargas
    XElement newDocXML = XElement.Load("DBTiempo.xml");
    
    // instancias y agregas el o los elementos
    XElement newTiempo = new XElement("Tiempo", new XAttribute("codigo", (maxNr + 1)),
    new XElement("tiempoSeg", _tiempoTrabSeg),
    new XElement("fecha", _fechaActual.ToString("dd-MM-yyyy")));
    
    newDocXML.Add(newTiempo);
    
    
    // finalmente, guardas
    newDocXML.Save("DBTiempo.xml");
    

    • Marcado como respuesta soy_binario miércoles, 29 de noviembre de 2017 19:40
    miércoles, 29 de noviembre de 2017 19:28
  • Si esta bien pero algo no cuadra por que me sale sobre este codigo:

    newDocXML.Element("Tiempos").Add(newTiempo);

    Referencia a objeto no establecida como instancia de un objeto.


    miércoles, 29 de noviembre de 2017 19:35
  • Gracias ya salio bien.
    miércoles, 29 de noviembre de 2017 19:41
  • >>Referencia a objeto no establecida como instancia de un objeto.

    puede que no este pudiendo seleccionar el tag Tiempos, que pasa si usas

    var tiempos = newDocXML.Element("Tiempos");
    tiempos.Add(newTiempo);


    puedes valida que se selecciona el elemento? quizas tengas que usar Elements() de "Tiempo"

    igual la solucion que marcaste me suena raro que funcione, porque salvo que newDocXML este referenciando al nodo root no veo como podrias agregarlo dentro de Tiempos, valida que el nodo lo agrego bajo el nodo que buscas

     LINQ To XML Tutorials with Examples

    igual creo que eso es lo que ocurre lo agrega al root

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 29 de noviembre de 2017 20:53