Ir al contenido


Foto

[RESUELTO] Crear archivo XML con TXMLDocument


  • Por favor identifícate para responder
24 respuestas en este tema

#21 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 27 octubre 2010 - 09:16

:D :D :D
  • 0

#22 felipe

felipe

    Advanced Member

  • Moderador
  • PipPipPip
  • 3.283 mensajes
  • LocationColombia

Escrito 03 noviembre 2010 - 09:35

Después de haber tenido un tiempo abandonado el tema, retorno a el con la solución:

IXMLDocument

Simplemente cambie la declaraciones originales por una variable de este tipo.
Solución instantánea (y)


Saludos!
  • 0

#23 Vivas84

Vivas84

    Member

  • Miembros
  • PipPip
  • 23 mensajes

Escrito 12 mayo 2011 - 02:12

Buenas,

Os pongo en situación. Una aplicación de uso propio que quiere monitorizar algunas cosas de diferentes localidades. Cada una de esas localidades tendrá asociados diferentes canales, y su estado. Canales puede ser cualquier cosa que tendrá dos estados: Monitorización o Ayuda a la monitorización, y podrá estar activo o inactivo. La cuestión es crear un fichero XML que ayude a gestionarlo.

A ver si alguien inspirado puede saber por qué me da problema de acceso a memoria el siguiente código. En concreto pasa cuando llamo a Escribe_Pueblo después de haber llamado a Create. Se llaman en diferentes formularios.



delphi
  1. TXMLWriter = class (TObject)
  2.   private
  3.   Doc: TXMLDocument;
  4.   public
  5.   Constructor Create;overload;
  6.     procedure Escribe_Canal(Localidad: Integer; idCanal: Integer;
  7.     nombreCanal: String; Tipo: String; Activo:Boolean);
  8.     procedure Escribe_Pueblo(idLocalidad: Integer;Localidad: String;
  9. Estado:String);
  10.     procedure Cierra();
  11.   end;





delphi
  1. constructor TXMLWriter.Create;
  2. var
  3. Root: IXMLNode;
  4. begin
  5.   inherited;
  6.   Doc := TXMLDocument.Create(nil);
  7. Doc.Active:=True;
  8.   Doc.AddChild('config');
  9.   Doc.DocumentElement.AddChild('hola');
  10.   Doc.DocumentElement.AddChild('adios');
  11.   Doc.Active:=False;
  12.  
  13. end;





delphi
  1. procedure TXMLWriter.Escribe_Pueblo(idLocalidad: Integer;Localidad: String;
  2. Estado:String);
  3. var
  4. Def, Propiedad, Pueblo: IXMLNode;
  5. begin
  6. Pueblo := Doc.DocumentElement.AddChild('localidad');
  7.   Pueblo.Attributes['id']:=IntToStr(idLocalidad);
  8.   Propiedad := Pueblo.AddChild('nombre');
  9.   Propiedad.Text := Localidad;
  10.   Propiedad := Pueblo.AddChild('estado');
  11.   Propiedad.Text := Estado;
  12. end;



Un saludo.
  • 0

#24 Vivas84

Vivas84

    Member

  • Miembros
  • PipPip
  • 23 mensajes

Escrito 17 mayo 2011 - 11:03

Problema solucionado.

Se trataba de que a la hora de llamar al constructor de TXMLDocument, hay que pasarle por parámetros un objeto, como por ejemplo, Form1, que se hará cargo de la gestión de memoria correspondiente al objeto en cuestión.

Esto se debe, por lo que he conseguido leer, a que la clase en cuestión implementación del objeto COM MSXML. Ahora toca investigar más a fondo sobre COM.

Un saludo.


  • 0

#25 angelholberg

angelholberg

    Newbie

  • Miembros
  • Pip
  • 6 mensajes

Escrito 01 julio 2011 - 04:47

Tal ves esto funcione tambien es una manera de hacer DatBinding parecida a como lo hace Java con su libreria Jaxb y apuesto e slo mejor que existe:

http://angelsw.wordp...-estilo-delphi/
  • 0