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


 


Tema destacado: 4n4lDetector v1.3: herramienta de análisis estático de malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderadores: Novlucker, seba123neo, kub0x, Eleкtro)
| | | |-+  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 292 veces)
aspiazu

Desconectado Desconectado

Mensajes: 56


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

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 por Eleкtro » En línea

Eleкtro
Novato Astral y
Moderador Global
***
Desconectado Desconectado

Mensajes: 9.146


El sentido común es el menos común de los sentidos


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

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 por Eleкtro » En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
sobreescribir
Programación C/C++
utech 6 2,104 Último mensaje 27 Septiembre 2005, 01:51
por Pseudoroot
Posix en win xp Sobreescribir
Foro Libre
Rocktherocker 0 600 Último mensaje 26 Noviembre 2008, 19:43
por Rocktherocker
Sobreescribir EIP
Bugs y Exploits
Fire544 8 3,941 Último mensaje 28 Agosto 2009, 22:34
por Fire544
¡¡¡ No puedo sobreescribir el RET !!! « 1 2 »
Bugs y Exploits
Garfield07 18 5,857 Último mensaje 19 Enero 2011, 18:39
por Garfield07
[?]Sobreescribir la URL entera?
Desarrollo Web
VCore 2 1,087 Último mensaje 13 Junio 2011, 05:41
por VCore
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines