elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Escribir xml sin sobreescribir
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Escribir xml sin sobreescribir  (Leído 2,527 veces)
aspiazu

Desconectado Desconectado

Mensajes: 58


Ver Perfil
Escribir xml sin sobreescribir
« en: 30 Abril 2017, 11:29 am »

Buenas tengo este código que me escribe en un xml los datos de dos variables que tengo .Como puedo hacer que me escriba pero sin borrar lo que estaba puesto ya??

 
Código
  1. public void Save() {
  2.  
  3.        XmlDocument doc = new XmlDocument();
  4.        doc.LoadXml("<Libro></Libro>");
  5.  
  6.        XmlElement newElem = doc.CreateElement("name");
  7.        newElem.InnerText = "" + text;
  8.        doc.DocumentElement.AppendChild(newElem);
  9.  
  10.        XmlElement newElem0 = doc.CreateElement("autor");
  11.        newElem0.InnerText = "" + Autor.autor;
  12.        doc.DocumentElement.AppendChild(newElem0);
  13.  
  14.  
  15.        XmlTextWriter writer = new XmlTextWriter(@"D:\data.xml", null);
  16.        writer.Formatting = Formatting.Indented;
  17.        doc.Save(writer);
  18.    }
  19. }
con eso consigo esta estructura

Código
  1. <Libro>
  2.  <name>DATOS DE LA VARIABLE</name>
  3.  <autor>DATOS DE LA VARIABLE</autor>
  4. </Libro>
 
pero claro,con la funcion save de arriba lo que ago todo el rato es borrar lo que habia y meter los nuevos datos .Lo que quiero es que me valla guardando todos los datos sin borrar nada

Alguna idea de que editar en ese codigo para que funcione como quiero?


« Última modificación: 1 Mayo 2017, 06:41 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Escribir xml sin sobreescribir
« Respuesta #1 en: 1 Mayo 2017, 05:36 am »

Código
  1. public void Save() {
  2.        // ...
  3.        XmlTextWriter writer = new XmlTextWriter(@"D:\data.xml", null);
  4.        writer.Formatting = Formatting.Indented;
  5.        doc.Save(writer);
  6.    }
  7. }

Eso que estás haciendo es muy incorrecto, te va a saltar ua excepción si llamas a tu método Save() más de una vez. Debes asegurarte de liberar el stream encapsulado por la clase XmlTextWriter o de lo contrario no podrás volver a abrir el archivo para escribir ...puesto que seguirá estando abierto/en uso por la instancia anterior de la clase XmlTextWriter.

Añade una llamada al método writer.Close() al final de ese bloque de código, o en su defecto decora la declaración del objeto con la sentencia using.



Alguna idea de que editar en ese codigo para que funcione como quiero?

No entiendo qué quieres hacer exactamente.

Si lo que quieres es actualizar el valor de un elemento existente y/o agregar un nodo o elemento al nodo existente, pues simplemente carga el documento existente y haz tus modificaciones:

Código
  1. string name = "value";
  2.  
  3. XmlDocument doc = new XmlDocument();
  4. doc.Load(@"D:\data.xml");
  5. doc("Libro")("name").InnerText = name;
  6. doc.Save(@"D:\data.xml");

Y bueno, si quieres utilizar una forma de leer y/o escribir un documento Xml paso a paso, entonces puedes utilizar las clases XmlTextReader y XmlTextWriter.

Código
  1. byte[] buffer = File.ReadAllBytes(@"D:\data.xml");
  2.  
  3. using (MemoryStream ms = new MemoryStream()) {
  4.    ms.Write(buffer, 0, buffer.Length);
  5.    ms.Seek(0, SeekOrigin.Begin);
  6.  
  7.    using (XmlTextReader reader = new XmlTextReader(ms)) {
  8.    using (XmlTextWriter writer = new XmlTextWriter(ms, reader.Encoding)) {
  9.  
  10.            while (reader.Read()) {
  11.                if (reader.IsStartElement()) {
  12.                    switch (reader.Name) {
  13.                        case "name":
  14.                            break;
  15.                        case "autor":
  16.                            break;
  17.                        default:
  18.                            break;
  19.                    }
  20.                }
  21.            }
  22.  
  23.            writer.Flush();
  24.  
  25.            using (FileStream fs = File.Create(@"D:\data_new.xml")) {
  26.                ms.Seek(0, SeekOrigin.Begin);
  27.                ms.CopyTo(fs);
  28.            }
  29.        }
  30.    }
  31.  
  32. }

¡Saludos!


« Última modificación: 1 Mayo 2017, 06:43 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
(ayuda) copiar sin sobreescribir
.NET (C#, VB.NET, ASP)
guidosl 1 4,940 Último mensaje 12 Marzo 2009, 20:09 pm
por guidosl
Sobreescribir el archivo iexplore.exe
Hacking
iubens 5 5,901 Último mensaje 14 Marzo 2011, 15:50 pm
por TheInfinityJoker
¡¡¡ No puedo sobreescribir el RET !!! « 1 2 »
Bugs y Exploits
Garfield07 18 10,182 Último mensaje 19 Enero 2011, 18:39 pm
por Garfield07
[?]Sobreescribir la URL entera?
Desarrollo Web
VCore 2 2,356 Último mensaje 13 Junio 2011, 05:41 am
por VCore
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines