Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Procesar Archivos XML en Delphi 7

Hola:

¿Como puedo en Delphi 7 leer y generar archivos en formato XML?

Agradezco información y ejemplos sobre el componente XMLDocument de Delphi 7 o cualquier otro componente o clase XML que ustedes consideren importante.

Gracias de antemano

Saludos,

Nelson

Última edición por nlsgarcia fecha: 15-10-2012 a las 05:16:27.
Responder Con Cita
  #2  
Antiguo 15-10-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.269
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Busca también sobre la herramienta XMLMapper que viene con delphi. Si revisas esta entrada verás un ejemplo de utilización.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 15-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Neftali,

Gracias por la información de XMLMapper

¿Tendras algún ejemplo del Componente XMLDocument de Delphi 7?

Nelson
Responder Con Cita
  #4  
Antiguo 16-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Hola:

Este es un ejemplo autoexplicativo de como Leer y Generar archivos en formato XML con Delphi 7 por medio del componente XMLDocument creado de forma dinámica:

Código Delphi [-]
unit Unit26;

interface

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

type
  TForm26 = class(TForm)
    ListBox1: TListBox;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form26: TForm26;

implementation

{$R *.dfm}

// Crea un archivo XML : Document_File_XML
procedure TForm26.Button1Click(Sender: TObject);
var
   XML : TXMLDocument;
   ChildNode : IXMLNode;
   i, j : Integer;
begin
   XML := TXMLDocument.Create(nil);
   try
     XML.Active := true;
     // Crea el cuerpo princial del documento XML 
     XML.AddChild('Document_File_XML');

     for i := 1 to 3 do
     begin
        // Crea el Nodo Raiz o Registro
        ChildNode := XML.DocumentElement.AddChild('Root_Node-' + IntToStr(i));
        for j:=1 to 3 do
           // Crea el Nodo Hijo o Campo del Registro
           ChildNode.AddChild('Child_Node-' + IntToStr(j)).text := 'TextChild-' + IntToStr(i) + IntToStr(j);
     end;

     // Identa el Documento XML
     XML.XML.Text := xmlDoc.FormatXMLData(XML.XML.Text);

     XML.Active := true;
     
     // Salva el archivo creado 
     XML.SaveToFile('Document_File_XML.xml');

     XML.Active := False;

   finally
     XML := nil;
   end;
end;

// Lee un archivo XML : Document_File_XML
procedure TForm26.Button2Click(Sender: TObject);
var
   XML : TXMLDocument;
   ChildNode : IXMLNode;
   i,j : Integer;
begin
   ListBox1.Clear;
   XML := TXMLDocument.Create(Self);
   try
      XML.Active := True;
      
      // Carga el archivo creado 
      XML.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Document_File_XML.xml');

      // Lee todos los Nodos o Registros
      for i:= 0 to XML.DocumentElement.ChildNodes.Count - 1 do
      begin
         // Lee un Nodo o Registro
         ChildNode := XML.DocumentElement.ChildNodes[i];
         for j:= 1 to 3 do
            // Lee cada Nodo Hijo o Campo del registro
            ListBox1.Items.Add(ChildNode.ChildNodes['Child_Node-' + IntToStr(j)].Text);
      end;
      XML.Active := False;
   finally
      XML := nil;
   end;
end;

end.


Código:
// Archivo Document_File_XML Creado y Leído por las rutinas anteriores
<Document_File_XML>
    <Root_Node-1>
        <Child_Node-1>TextChild-11</Child_Node-1>
        <Child_Node-2>TextChild-12</Child_Node-2>
        <Child_Node-3>TextChild-13</Child_Node-3>
    </Root_Node-1>
    <Root_Node-2>
        <Child_Node-1>TextChild-21</Child_Node-1>
        <Child_Node-2>TextChild-22</Child_Node-2>
        <Child_Node-3>TextChild-23</Child_Node-3>
    </Root_Node-2>
    <Root_Node-3>
        <Child_Node-1>TextChild-31</Child_Node-1>
        <Child_Node-2>TextChild-32</Child_Node-2>
        <Child_Node-3>TextChild-33</Child_Node-3>
    </Root_Node-3>
</Document_File_XML>
Se agradece cualquier información adicional sobre el Componente XMLDocument

Espero sea de utilidad este sencillo ejemplo genérico el cual puede ser adaptado a situaciones particulares

Nelson

Última edición por nlsgarcia fecha: 16-10-2012 a las 07:07:43.
Responder Con Cita
  #5  
Antiguo 16-10-2012
nnebli nnebli is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 14
Poder: 0
nnebli Va por buen camino
Voy a buscar lo que tengo sobre los XML y lo subo.

Intentaré recopilar lo que tengo mañana.

Saludos.
Responder Con Cita
  #6  
Antiguo 18-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Hola:

En este link : http://delphi.about.com/od/interneti...rss_read_3.htm hay un ejemplo completo y descargable de como leer una pagina web en formato XML (RSS Feeds) con la clase TXMLDocument el cual es aplicable a cualquier otro archivo XML.

Usa otros metodos de lectura del archivo XML de los previamente comentados que son muy interesantes y autoexplicativos

Anexo parte del ejemplo de la pagina citada en el link:
Código Delphi [-]
var
    StartItemNode : IXMLNode;
    ANode : IXMLNode;
    STitle, sDesc, sLink : WideString;
 begin
 ...
   //points to local XML file in "original" code
   XMLDoc.FileName := 'http://0.tqn.com/6/g/delphi/b/index.xml';
   XMLDoc.Active:=True;
 
   StartItemNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item') ;
 
   ANode := StartItemNode;
   repeat
     STitle := ANode.ChildNodes['title'].Text;
     sLink := ANode.ChildNodes['link'].Text;
     sDesc := ANode.ChildNodes['description'].Text;
 
     //add to list view
     with LV.Items.Add do
     begin
       Caption := STitle;
       SubItems.Add(sLink) ;
       SubItems.Add(sDesc)
     end;
 
     ANode := ANode.NextSibling;
   until ANode = nil;
Espero sea útil

Nelson.
Responder Con Cita
  #7  
Antiguo 20-10-2012
nnebli nnebli is offline
Miembro
NULL
 
Registrado: may 2011
Posts: 14
Poder: 0
nnebli Va por buen camino
Ante todo pido disculpas por no cumplir lo dicho, no ha sido mi intención. A veces hay más cosas que hacer de las que se pueden y no he podido subir la informaición que tegon yo sobre los XML.

Esto es con lo que yo estoy trabajando y me ha servido para crear XML más o menos complejos:

Nota: Te creas una ficha (un nuevo poyecto) y en ella pones varios botones para llamar a los procedimientos que se indican: Button2Click, Button3Click, etc. Copiando lo que ponen estos procedimientos te debería funcionar. Te pego el pequeño programilla que tengo de ejemplo, copia lo que necesites dentro de tu Forn: (si tienes cualquier duda, lo dices, intentaré ir viendo si hay dudas).

Para ir comprobando como funciona, ves en orden, ejecuta primero: Button2Click y luego el resto, ya que de lo contrario, lo mismo trata de leer un archivo XML que no existe y te dará error.

Saludos. Espero que te sea de utilidad. (Yo trabajo con Delphi 7)


Código Delphi [-]
unit UGeneraFicherosEnXML;
interface
uses
XMLDoc,XMLIntf,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBClient, xmldom, msxmldom, ExtCtrls;
type
TGeneraFicherosEnXML = class(TForm)
Button2: TButton;
XMLDocument1: TXMLDocument;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Bevel1: TBevel;
Label2: TLabel;
Label1: TLabel;
Bevel2: TBevel;
Button1: TButton;
procedure TeclaPulsada(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
GeneraFicherosEnXML: TGeneraFicherosEnXML;
 
implementation
{$R *.dfm}
 
procedure TGeneraFicherosEnXML.TeclaPulsada(Sender: TObject; var Key: Char);
begin
If Key = #27 Then Close;
end;
 
procedure TGeneraFicherosEnXML.Button2Click(Sender: TObject);
var
archivoXML: TXMLDocument;
Nodo,NDatosGenerales,NMensajeFacturacion,NCabecera,NDatosFinales : IXMLNode;
begin
archivoXML := TXMLDocument.Create(Application);
try
// Activamos el archivo XML
archivoXML.Active := True;
archivoXML.Version:='1.0';
archivoXML.Encoding:='UTF-8';
 
// Creamos el elemento principal: EsteEsElementoPrincipal //
NMensajeFacturacion := archivoXML.AddChild('EsteEsElementoPrincipal');
NMensajeFacturacion.Attributes['Firmar'] := 'NO';
 
// Ponemos el elemento que denominamos: Cabecera //
NCabecera := NMensajeFacturacion.AddChild( 'Cabecera' );
// ponemos elementos hijos del anterior que era 'Cabecera'
Nodo := NCabecera.AddChild( 'FechaSolicitud' );
Nodo.Text := '2012-09-08T11:57:31+01:00';
Nodo := NCabecera.AddChild( 'Version' );
Nodo.Text := '02';
 
// Ponemos el elemento: DatosGenerales - Dentro del elemento Cabecera
NDatosGenerales := NCabecera.AddChild( 'DatosGenerales' );
Nodo := NDatosGenerales.AddChild( 'Calle' );
Nodo.Text := 'Del río, 3';
Nodo := NDatosGenerales.AddChild( 'Municipio' );
Nodo.Text := 'Fuenlabrada';
 
// Ponemos el elemento: DatosFinales //
NDatosFinales := NMensajeFacturacion.AddChild( 'DatosFinales' );
// ponemos elementos hijos del anterior que era 'DatosFinales'
Nodo := NDatosFinales.AddChild( 'Enviado' );
Nodo.Text := '2012-09-08';
Nodo := NDatosFinales.AddChild( 'ConfirmacionRecepcion' );
Nodo.Text := 'SI';
 
// guardamos los datos del fichero con el nombre indicado
archivoXML.SaveToFile(ExtractFilePath(Application.ExeName) + 'Fichero en XML de prueba.xml');
 
finally
archivoXML.Free;
end;
 
end;
procedure TGeneraFicherosEnXML.Button3Click(Sender: TObject);
var
Cliente: IXMLNode;
begin
// LEYENDO EL VALOR DE LOS NODOS
XMLDocument1.LoadFromFile( ExtractFilePath( Application.ExeName ) + 'Fichero en XML de prueba.xml' );
XMLDocument1.Active := True;
Cliente := XMLDocument1.DocumentElement.ChildNodes[0];
ShowMessage( Cliente.ChildNodes['FechaSolicitud'].Text );
end;
procedure TGeneraFicherosEnXML.Button4Click(Sender: TObject);
var
Cliente: IXMLNode;
begin
// MODIFICANDO EL VALOR DE LOS NODOS
XMLDocument1.LoadFromFile( ExtractFilePath( Application.ExeName ) + 'Fichero en XML de prueba.xml' );
XMLDocument1.Active := True;
Cliente := XMLDocument1.DocumentElement.ChildNodes[0];
Cliente.ChildNodes['FechaSolicitud'].Text := 'Nueva fecha 19-10-2012';
XMLDocument1.SaveToFile( ExtractFilePath( Application.ExeName ) + 'Fichero en XML de prueba.xml' );
end;
 
procedure TGeneraFicherosEnXML.Button5Click(Sender: TObject);
var
Cliente, Nodo: IXMLNode;
begin
// AÑADIENDO NODOS
XMLDocument1.LoadFromFile( ExtractFilePath( Application.ExeName ) + 'Fichero en XML de prueba.xml' );
XMLDocument1.Active := True;
Cliente := XMLDocument1.DocumentElement.AddChild( 'EsteNodoHaSidoAnnadido' );
Nodo := Cliente.AddChild( 'NuevoNodoAnnadido' );
Nodo.Text := 'Datos annadidos 1';
Nodo := Cliente.AddChild( 'FechaAnnadido' );
Nodo.Text := '19-10-2012';
XMLDocument1.SaveToFile( ExtractFilePath( Application.ExeName ) + 'Fichero en XML de prueba.xml' );
 
end;
 
procedure TGeneraFicherosEnXML.Button6Click(Sender: TObject);
begin
// BORRANDO NODOS
XMLDocument1.LoadFromFile( ExtractFilePath( Application.ExeName ) + 'Fichero en XML de prueba.xml' );
XMLDocument1.Active := True;
XMLDocument1.DocumentElement.ChildNodes.Delete( 0 );
XMLDocument1.SaveToFile( ExtractFilePath( Application.ExeName ) + 'Fichero en XML de prueba.xml' );
 
end;
 
procedure TGeneraFicherosEnXML.Button1Click(Sender: TObject);
begin
Close;
end;
 
end.

Última edición por Casimiro Notevi fecha: 20-10-2012 a las 10:12:24.
Responder Con Cita
  #8  
Antiguo 20-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por nnebli Ver Mensaje
..
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #9  
Antiguo 20-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
nnebli,

Gracias, muy interesante el ejemplo

Nelson.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Delphi 2007 en un procesar de 64 bits lucas05 Varios 3 16-05-2012 15:43:39
¿como Procesar listado en archivos INI? JXJ Varios 11 09-02-2011 04:00:38
¿Opendialog como Procesar archivos por lote? JXJ Varios 2 02-02-2011 15:23:12
Procesar archivos inmediatamente despues de su copiado o transferencia. fredycc OOP 3 17-02-2009 20:30:53
Procesar Archivos de Texto delimitados por TAB para luego import en Access dago_Ariza Conexión con bases de datos 1 13-05-2004 09:24:39


La franja horaria es GMT +2. Ahora son las 18:27:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi