PDA

Ver la Versión Completa : Crear archivo xml con delphi


Muriel
23-02-2019, 17:24:34
Hola compañeros de foro

Les comento que estoy tratando de generar un archivo XML con Delphi 7, ya lo logre hasta cierto punto, funciona bien, pero lo que no sé cómo hacer es esto <complemento xsi:nil="true"/> en Delphi para que el código XML quede así. Abajo des muestro mi código.

Espero que me puedan ayudar.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj, xmldom, XMLIntf, msxmldom, XMLDoc;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
XML : IXMLDOCUMENT;
Registro, Datos: IXMLNODE;
begin
XML := NewXMLDocument;
XML.Encoding := 'UTF-8';
XML.Options := [doNodeAutoIndent];

Registro := XML.AddChild('ClientesXML');
Registro.Attributes['xsi:noNamespaceSchemaLocation']:= 'ClientesXML.xsd';
Registro.Attributes['xmlns:xsi']:= 'w1.com/2019/XMLSchema-instance';

Datos := Registro.AddChild('cliente');

Datos.AddChild('nombre').Text := 'JUAN PERES FICTICIO';
Datos.AddChild('edad').Text := '25';
Datos.AddChild('numeroDocumenta').Text := '123456';
Datos.AddChild('complemento'); //esto debe quedar asi <complemento xsi:nil="true"/>
//lo que no se como hacer

Datos := Registro.AddChild('detalles');

Datos.AddChild('direccion').Text := 'Calle Valle Hermoso #123';
Datos.AddChild('estadoCivil'); //esto debe quedar asi <estadoCivil xsi:nil="true"/>
Datos.AddChild('etcEtc').Text := '21312';

XML.SaveToFile( ExtractFilePath( Application.ExeName ) + 'Cientes.xml' );
end;

end.


Con esto el XML me queda asi


<?xml version="1.0" encoding="UTF-8"?>
<ClientesXML xmlns:xsi="estoLoBorre" xsi:noNamespaceSchemaLocation="ClientesXML.xsd"><cliente><nombre>JUAN PERES FICTICIO</nombre><edad>25</edad><numeroDocumenta>123456</numeroDocumenta><complemento/></cliente><detalles><direccion>Calle Valle Hermoso #123</direccion><estadoCivil/><etcEtc>21312</etcEtc></detalles></ClientesXML> yo nesesito que sea ai
<?xml version="1.0" encoding="UTF-8"?>
<ClientesXML xmlns:xsi="estoLoBorre" xsi:noNamespaceSchemaLocation="ClientesXML.xsd"><cliente><nombre>JUAN PERES FICTICIO</nombre><edad>25</edad><numeroDocumenta>123456</numeroDocumenta><complemento xsi:nil="true"/></cliente><detalles><direccion>Calle Valle Hermoso #123</direccion><estadoCivil xsi:nil="true"/><etcEtc>21312</etcEtc></detalles></ClientesXML>

roman
25-02-2019, 19:08:02
No tengo Delphi a mano para probar pero viendo tu código parece que sólo necesitas asignar el resultado de Datos.AddChild('complemento') a otra variable Complemento de tipo IXMLNODE y sobre ella asignar el atributo:


Complemento.Attributes['xsi:nil'] := 'true';


// Saludos

Muriel
25-02-2019, 23:40:36
Gracias por respondes roman.
Pero antes de preguntar en el foro probé de esa manera y no se podía posterior a seguía luchando hasta que se me ocurrió de esta manera y me resulto bien.

AddChild('complemento').Attributes['xsi:nil']:= 'true';


Ahora mi mayor problema es que a ese archivo XML tengo que enviar por internet como intercambio de información, aun servidor o host no sé cómo es esto la cosa es que nunca ice cosas como eso.
Si alguien podría brindarme ayuda con eso seria maravilloso.
De ante mano les agradezco mucho.
Saludos.

Casimiro Notevi
26-02-2019, 00:01:57
Crea un hilo con tu duda, ponle un título descriptivo y explica lo más claramente posible lo que necesitas y el problema que tienes.
Saludos.