Ahora toca el turno de generar el archivo XML, anteriormente habíamos visto como leer un archivo en formato XML, en el cual habíamos utilizado las librerías proporcionadas por Free Pascal, ahora usaremos otras que son nativas para Lazarus, y aprenderemos como añadir paquetes
Primero creemos la Interfaz, colocando los siguientes componentes:
| Componente | Nombre(Name) | Caption |
| TForm | Form1 | Creando XML |
| TButton | BtnCrear | &Crear |
| TEdit | EdComentario |
Ahora necesitamos ingresar el código, pero antes llamamos a las librerías que necesitamos para que podamos escribir en XML, que en este caso serán las librerías para lazarus: Laz_DOM y Laz_XMLWrite, para ello debemos añadir un paquete a los requeridos del proyecto, esto lo logramos pulsando el menú Proyecto -> Inspector de Proyecto, con esto nos mostrará una ventana con todos los archivos y paquetes con que se compila nuestra aplicación, pulsamos sobre el botón añadir y luego a la pestaña Nuevo Requerimiento:
Y seleccionamos CodeTools, que es el paquete que contiene las cabeceras que necesitamos (laz_dom.pas y laz_xmlwrite.pas), esto lo pueden verificar si van a la carpeta components/codetools en donde este instalado lazarus.
Luego de esto, debemos verificar que en la ventana del inspector del proyecto aparezca CodeTools, en la lista de paquetes requeridos:
Ahora debemos agregar Laz_DOM y Laz_XMLWrite a la clausula Uses e ingresamos el código para el evento OnClick del BtnCrear:
procedure TForm1.BtnCrearClick(Sender: TObject);
var
Doc : TXMLDocument;
DomNodo, DomRaiz, DomDato : TDOMNode;
begin
//Creamos un documento
Doc:=TXMLDocument.Create;
//Creamos la raiz del documento
//nombrandolo "ejemplo"
DomRaiz:=Doc.CreateElement('ejemplo');
//despues de añadir un nodo al documento este es vaciado
Doc.AppendChild(DomRaiz);
//por lo tanto recuperamos el puntero
DomRaiz:=Doc.DocumentElement;
//Creamos el primer Nodo del documento
DomNodo:=Doc.CreateElement('PrimerDato');
//Hacemos un casting a la variable DomNodo
//de tipo TDOMElement para poder
//colocarle atributos.
TDOMElement(DomNodo)['atributo']:='algunvalor';
//agregamos el nodo al nodo raiz
DomRaiz.AppendChild(DomNodo);
//Como la variable DomNodo ha sido vaciada
//podemos crear otro nodo con la misma
//variable
DomNodo:=Doc.CreateElement('segundoDato');
//creamos tambien un nodo de texto
DomDato:=Doc.CreateTextNode('contenido');
//asignacion de parametro al nodo
TDOMElement(DomNodo)['tipo']:='cadena';
//Añadimos el nodo de texto al nodo DOMNodo
DomNodo.AppendChild(DomDato);
//Al primer nodo hijo (PrimerDato) de la raiz
//le añadimos el nodo contenido en DomNodo
DomRaiz.ChildNodes.Item[0].AppendChild(DomNodo);
//creamos otro nodo pero de comentario
//con el texto del TEdit
DomDato:=Doc.CreateComment(EdComentario.Text);
//añadimos directamente el nodo de comentario
//al mismo nivel que "PrimerDato"
DomRaiz.AppendChild(DomDato);
//Escribimos el archivo
WriteXMLFile(Doc,'prueba.xml');
//Liberamos Memoria.
Doc.Free;
end;
Compilamos, y estamos listos.
Esto nos creará un archivo prueba.xml como este:
<?xml version="1.0"?>
<ejemplo>
<PrimerDato atributo="algunvalor">
<segundoDato tipo="cadena">contenido</segundoDato>
</PrimerDato>
<!--Escriba su comentario-->
</ejemplo>
Ahora puede probar abrirlo con el proyecto que hicimos anteriormente




Pero… ¡qué pedazo de alegría al descubriros! Soy un principiante total, acabo de compilar con lazarus mi primera aplicación recién migradita desde Delphi… y acabáis de ingresar en mis favoritos.
Saludos, ánimo y gracias
Gracias, estaremos de nuevo con posts a cada semana después de terminar con la ardua tarea de la organización de CGSOL
Saludos.