Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

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: 14
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
Neftali Neftali is offline
-Germán Estévez-
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.128
Poder: 10
Neftali Va camino a la famaNeftali Va camino a la fama
Busca también sobre la herramienta XMLMapper que viene con delphi. Si revisas esta entrada verás un ejemplo de utilización.
__________________
Neftalí -web - MyDropBox-
Guía de estilo, Guía alternativa, TAG's.
*Añade tu foto al Club*

(UPDATE) TrackInfo v.1.7b

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: 14
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: 14
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
 
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: 14
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
 
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: 26.878
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: 14
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
nnebli,

Gracias, muy interesante el ejemplo

Nelson.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 14:52:05.


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