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 13-04-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 419
Poder: 17
IVAND Va por buen camino
Leer XML firmado por sri Ecuador

Hola a todos

Estoy leyendo un XML firmado con el componente XMLDocument y esta bien todo pero no logro leer los nodos que estan mas adentro

Código:
<?xml version="1.0" encoding="UTF-8"?>

<autorizacion>

<estado>AUTORIZADO</estado>

<numeroAutorizacion>0307201600341817912561150018453454555</numeroAutorizacion>

<fechaAutorizacion>2016-07-03T00:34:18-05:00</fechaAutorizacion>

<ambiente>PRODUCCIÓN</ambiente>

<comprobante>
......
</comprobante>
</autorizacion>
Por ejemplo pude leer los que dicen estado y todos eso pero los que van dentro de el nodo comprobante ya no

Alguien me puede dar una luz que estoy haciendo mal


Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
var
  Autorizacion,Comprobante: IXMLNode;
begin
  XMLDocument1.FileName :='c:\xml_facturas\FA3110201801099270940500120010020000020240001395717.xml';
  XMLDocument1.Active := True;
  try
    Autorizacion := XMLDocument1.DocumentElement;
    Comprobante  := XMLDocument1.DocumentElement;

    edit.Text := Autorizacion.ChildNodes['estado'].Text;
    edit11.Text := Autorizacion.ChildNodes['numeroAutorizacion'].Text;
    edit12.Text := Autorizacion.ChildNodes['fechaAutorizacion'].Text;
    edit13.Text := Autorizacion.ChildNodes['ambiente'].Text;

    edit14.Text := Comprobante.ChildNodes['razonSocia'].Text;
    //txtModel.Text := Vehicle.ChildNodes['model'].Text;
    //txtnumber.Text  := Vehicle.ChildNodes['number'].Text;
  finally
    XMLDocument1.Active := False;
  end;
end;


Gracias a todos
__________________
IVAND
Responder Con Cita
  #2  
Antiguo 16-04-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 152
Poder: 6
bucanero Va camino a la fama
Hola IVAND

prueba a asignar la variable comprobante como aparece mas abajo

Código Delphi [-]
  try
    Autorizacion := XMLDocument1.DocumentElement;
    Comprobante  := Autorizacion.ChildNodes['comprobante'];

    ...
    edit14.Text := Comprobante.ChildNodes['razonSocia'].Text;
    ...
  finally
    XMLDocument1.Active := False;
  end;

saludos
Responder Con Cita
  #3  
Antiguo 17-04-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 419
Poder: 17
IVAND Va por buen camino
Gracias Bucanero , pero no lee la info
__________________
IVAND
Responder Con Cita
  #4  
Antiguo 17-04-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 152
Poder: 6
bucanero Va camino a la fama
Cita:
Empezado por IVAND Ver Mensaje
pero no lee la info
Hola IVAND

Con esa información que das, no te puedo ayudar mucho... ¿Da error? si da error ¿que error es? ¿No lee nada?, ¿no hace ni dice nada? ...

A mi, en concreto y sobre este XML de ejemplo

Código:
<?xml version="1.0" encoding="UTF-8"?>
<autorizacion>
<estado>AUTORIZADO</estado>
<numeroAutorizacion>0307201600341817912561150018453454555</numeroAutorizacion>
<fechaAutorizacion>2016-07-03T00:34:18-05:00</fechaAutorizacion>
<ambiente>PRODUCCIÓN</ambiente>
<comprobante>
<razonSocial>rsocial</razonSocial>
<dato1>informacion1</dato1>
<dato2>info 2</dato2>
<dato3>info 3</dato3>
</comprobante>
</autorizacion>
y con este código, me lo lee sin problemas:
Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
  var
  Autorizacion,Comprobante: IXMLNode;
begin
  XMLDocument1.FileName := OpenDialog1.FileName;
  XMLDocument1.Active := True;
  try
    Autorizacion := XMLDocument1.DocumentElement;

    Memo1.Lines.add(Autorizacion.ChildNodes['estado'].Text);
    Memo1.Lines.add(Autorizacion.ChildNodes['numeroAutorizacion'].Text);
    Memo1.Lines.add(Autorizacion.ChildNodes['fechaAutorizacion'].Text);
    Memo1.Lines.add(Autorizacion.ChildNodes['ambiente'].Text);

    Comprobante  := Autorizacion.ChildNodes['comprobante'];
    Memo1.Lines.add(Comprobante.ChildNodes['razonSocial'].Text);
    Memo1.Lines.add(Comprobante.ChildNodes['dato1'].Text);
    Memo1.Lines.add(Comprobante.ChildNodes['dato2'].Text);
    Memo1.Lines.add(Comprobante.ChildNodes['dato3'].Text);
  finally
    XMLDocument1.Active := False;
  end;
end;
Responder Con Cita
  #5  
Antiguo 18-04-2019
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 419
Poder: 17
IVAND Va por buen camino
Hola Bucanero

Gracias por responder , te comento que es la estructura , pero al ser un xml firmado por el sri de nuestro pais ya pone cosas raras , si eres tan amable te puedo enviar a tu correo el xml en cuestion , claro esta si tienes tiempo le echas una mirada
Archivos Adjuntos
Tipo de Archivo: zip xml_facturas.zip (10,3 KB, 6 visitas)
__________________
IVAND
Responder Con Cita
  #6  
Antiguo 22-04-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 152
Poder: 6
bucanero Va camino a la fama
Hola IVAND

En tu ejemplo en particular, dentro del campo comprobante lo que va incluido es otro XML codificado, por lo tanto lo que debes de hacer es crear un segundo componente de tipo XMLDocument y asignarle el valor descodificado de ese XML.

Para descodificar puedes utilizar la funcion HTMLDecode de la unidad HTTPApp

Aquí te pongo un ejemplo:

Código Delphi [-]
uses HTTPApp;


function TForm2.LoadComprobante(const AXMLComprobante: String): Boolean;
var
  factura, InfoTributaria, InfoFactura: IXMLNode;
  NName:String;
begin
  Result := False;
  try
    // se asigna el contenido del XML
    XMLDocument2.XML.Text := AXMLComprobante;
    XMLDocument2.Active := True;
    try
      factura := XMLDocument2.DocumentElement;

      InfoTributaria := factura.ChildNodes['infoTributaria'];
      Memo1.Lines.add(InfoTributaria.ChildValues['tipoEmision']);
      Memo1.Lines.add(InfoTributaria.ChildValues['razonSocial']);
      Memo1.Lines.add(InfoTributaria.ChildValues['nombreComercial']);

      InfoFactura := factura.ChildNodes['InfoFactura'];

      // ....
      result := true;
    finally
      XMLDocument2.Active := False;
    end;
  except
    on E: Exception do
      MessageDlg(E.message, mtError, [mbOK], 0);
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Autorizacion: IXMLNode;
begin
  XMLDocument1.FileName := OpenDialog1.FileName;
  XMLDocument1.Active := True;
  try
    Autorizacion := XMLDocument1.DocumentElement;

    Memo1.Lines.add(Autorizacion.ChildNodes['estado'].Text);
    Memo1.Lines.add(Autorizacion.ChildNodes['numeroAutorizacion'].Text);
    Memo1.Lines.add(Autorizacion.ChildNodes['fechaAutorizacion'].Text);
    Memo1.Lines.add(Autorizacion.ChildNodes['ambiente'].Text);
    LoadComprobante(HTMLDecode(Autorizacion.ChildNodes['comprobante'].Text));
  finally
    XMLDocument1.Active := False;
  end;
end;
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
Encriptacion y firmado electronico Willo Varios 1 12-05-2010 19:17:40
Un péndulo de Foucault situado en el ecuador no rota marcoszorrilla La Taberna 4 15-12-2008 11:54:26
Ecuador migra a software libre y estándares abiertos. Casimiro Notevi La Taberna 0 11-04-2008 22:40:22
Otro país que pasa a Linux su administración: Ecuador Casimiro Notevi Noticias 1 05-02-2007 17:09:05
Leer usb trex2000 Varios 1 14-03-2005 12:51:41


La franja horaria es GMT +2. Ahora son las 03:52:38.


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