Jump to content


Photo

[RESUELTO] Crear archivo XML con TXMLDocument


  • Please log in to reply
24 replies to this topic

#21 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 27 October 2010 - 09:16 AM

:D :D :D
  • 0

#22 felipe

felipe

    Advanced Member

  • Administrador
  • 3283 posts
  • LocationColombia

Posted 03 November 2010 - 09:35 AM

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 posts

Posted 12 May 2011 - 02:12 AM

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 posts

Posted 17 May 2011 - 11:03 AM

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 posts

Posted 01 July 2011 - 04:47 PM

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




IP.Board spam blocked by CleanTalk.