Jump to content


Photo

Leer XML


  • Please log in to reply
2 replies to this topic

#1 chaja

chaja

    Advanced Member

  • Miembros
  • PipPipPip
  • 54 posts

Posted 07 September 2014 - 05:36 PM

Hola:
bien, estoy tratando de leer un xml, que me viene desde un web service de la administracion federal de impuesto publicos AFIP en Argentina. Es la respuesta a una consulta de facturas Electronicas. Este XML de respuesta es asi:



xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. -<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">-<soap:Body>-<FECompConsultarResponse xmlns="http://ar.gov.afip.dif.FEV1/">-<FECompConsultarResult>-<ResultGet><Concepto>3</Concepto><DocTipo>80</DocTipo><DocNro>30683409991</DocNro><CbteDesde>7</CbteDesde><CbteHasta>7</CbteHasta><CbteFch>20140217</CbteFch><ImpTotal>524.54</ImpTotal><ImpTotConc>0</ImpTotConc><ImpNeto>433.5</ImpNeto><ImpOpEx>0</ImpOpEx><ImpTrib>0</ImpTrib><ImpIVA>91.04</ImpIVA><FchServDesde>20140217</FchServDesde><FchServHasta>20140217</FchServHasta><FchVtoPago>20140217</FchVtoPago><MonId>PES</MonId><MonCotiz>1</MonCotiz>-<Iva>-<AlicIva><Id>5</Id><BaseImp>433.5</BaseImp><Importe>91.04</Importe></AlicIva></Iva><Resultado>A</Resultado><CodAutorizacion>64072180426393</CodAutorizacion><EmisionTipo>CAE</EmisionTipo><FchVto>20140227</FchVto><FchProceso>20140217184340</FchProceso><PtoVta>5</PtoVta><CbteTipo>1</CbteTipo></ResultGet></FECompConsultarResult></FECompConsultarResponse></soap:Body></soap:Envelope>




la carga del documento lo hago con un XMLDocument.
Bueno lo que quier es leer cierto valores que me devuelve, como ser el nro de comprobante, el monto sin iva, el iva y demas
El web service no tiene una funcion para leer un grupo de comprobantes asi que hago una cosnulta tantas veces como comprobantes quiero de esta forma:



delphi
  1. procedure TFormFiscalizacionLote.btListarComprobClick(Sender: TObject);
  2. var aux:String;
  3. par1,par2:WideString;
  4. I,TipoCpbte,PuntoVta,NroDesde,NroHasta:Integer;
  5.   Nro: Integer;
  6. begin
  7.   inherited;
  8.  
  9.   lvGeneral.Clear;
  10.  
  11.   Aux:= CDSEmpresa.FieldByName('cuit').AsString;
  12.   while Pos('-',Aux)<>0 do
  13.     delete(Aux,Pos('-',Aux),1);
  14.  
  15.   wsfev1.Reset;
  16.   wsfev1.CUIT := StrToFloat(Aux); //FCuitVdor;  //20129063662; // Cuit del vendedor
  17.   wsfev1.URL  := URLWSW;
  18.  
  19.   if wsfev1.login(FormFiscalizacionLote.CertificadoElectronico,FormFiscalizacionLote.ClaveElectronica,URL  WSAA) then
  20.     begin
  21.       wsfev1.Reset;
  22.       PuntoVta:= StrToInt(edPrefijo.Text);
  23.       NroDesde    := StrToInt(edDesde.Text);
  24.       NroHasta    := StrToInt(edHasta.Text);
  25.       lvGeneral.Clear;
  26.  
  27.       for Nro := NroDesde to NroHasta do
  28.         begin
  29.           if (cbTp.Text='FC') and (cbLet.Text='A') Then
  30.               TipoCpbte:=1
  31.             else
  32.               if (cbTp.Text='FC') and (cbLet.Text='B') Then
  33.               TipoCpbte:=6
  34.               else
  35.                 if (cbTp.Text='NC') and (cbLet.Text='A') Then
  36.                   TipoCpbte:=3
  37.                 else
  38.                   if (cbTp.Text='NC') and (cbLet.Text='B') Then
  39.                     TipoCpbte:=8
  40.                   else
  41.                     if (cbTp.Text='FO') and (cbLet.Text='A') Then
  42.                         TipoCpbte:=5
  43.                     else
  44.                       if (cbTp.Text='FO') and (cbLet.Text='B') Then
  45.                           TipoCpbte:=10;
  46.           if not wsfev1.CmpConsultar(TipoCpbte, PuntoVta, Nro,par1,par2) then
  47.             ShowMessage (wsfev1.ErrorDesc)
  48.           else
  49.             begin
  50.               XMLDocument1.XML.Text :=wsfev1.XMLResponse;
  51.               XMLDocument1.Active:=True;
  52.             // XMLDocument1.SaveToFile('C:\RespuestaFiscal.xml');
  53.               NodoXML:=XMLDocument1.DocumentElement.ChildNodes.Nodes[0];
  54.               DisplayNodoRenglon(NodoXML);
  55. //              DisplayNodo(NodoXML);
  56.           end;
  57.         end;
  58.     end;
  59. end;



y DsiplayNodo() es



delphi
  1. procedure TFormFiscalizacionLote.DisplayNodoRenglon(Nodo:IXMLNode  );
  2. var i:Integer;
  3. Cadena:String;
  4. begin
  5.   Lista:=lvGeneral.Items.Add;
  6. //  Nodo.ChildNodes.FindNode('FchServDesde').NodeValue;
  7.   Cadena:=Nodo.ChildNodes['FchServDesde'].Text;
  8.   Lista.SubItems.Add(Cadena);
  9.  
  10.   Lista.SubItems.Add(cbTipo.Text);
  11.   Lista.SubItems.Add(cbTipo.Text);
  12.   Lista.SubItems.Add(cbLet.Text);
  13.  
  14. //  Nodo.ChildNodes.FindNode('PtoVta');
  15.   Lista.SubItems.Add(Copy('0000',1,4-Length(Nodo.ChildNodes['PtoVta'].Text))+Nodo.ChildNodes['PtoVta'].Text);
  16.  
  17. //  Nodo.ChildNodes.FindNode('CbteDesde');
  18.   Lista.SubItems.Add(Copy('00000000',1,8-Length(Nodo.ChildNodes['CbteDesde'].Text))+Nodo.ChildNodes['CbteDesde'].Text);
  19.  
  20. //  Nodo.ChildNodes.FindNode('DocNro');
  21.   Lista.SubItems.Add(Nodo.ChildNodes['DocNro'].Text);
  22.  
  23. //  Nodo.ChildNodes.FindNode('ImpNeto');
  24.   Lista.SubItems.Add(Nodo.ChildNodes['ImpNeto'].Text);
  25.  
  26. //  Nodo.ChildNodes.FindNode('ImpIva');
  27.   Lista.SubItems.Add(Nodo.ChildNodes['ImpIva'].Text);
  28.  
  29. //  Nodo.ChildNodes.FindNode('ImpTotal');
  30.   Lista.SubItems.Add(Nodo.ChildNodes['ImpTotal'].Text);
  31.  
  32. //  Nodo.ChildNodes.FindNode('CodAutorizacion');
  33.   Lista.SubItems.Add(Nodo.ChildNodes['CodAutorizacion'].Text);
  34.  
  35. //  Nodo.ChildNodes.FindNode('FchProceso');
  36.   Lista.SubItems.Add(Nodo.ChildNodes['FchProceso'].Text);
  37.  
  38. end;



a medido que voy leyendo los cargo en un ListView.
parceria que todo bien, pero cuando hago la lactura de cada nodo, estoy me tran datos vacios.

me pueden orientar donde esta el error???

Gracias
__________________
Luis A.Roldan (- Mar del Plata , Argentina- Te:472-4801)
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1092 posts
  • LocationMurcia, España

Posted 08 September 2014 - 04:08 AM

La respuesta XML esta vacia o llena? Siempre que lees esta vacio el nodo o solo en ciertos nodos o ciertas veces? has mirado a ver cuantos nodos lee y cuales estan llenos/vacios? No estará leyendo todos los nodos "colgando" de un nodo master (la estructura del XML puede no ser la que supones)?

Te toca investigarlo a ti mismo, sin acceso a la informacion de debug es dificil acertar.
  • 0

#3 chaja

chaja

    Advanced Member

  • Miembros
  • PipPipPip
  • 54 posts

Posted 08 September 2014 - 06:18 AM

Sergio... Gracias por tu tiempo...

si el xml tiene datos, fue algo que revise... fijate que tengo comentado esto

  // XMLDocument1.SaveToFile('C:\RespuestaFiscal.xml');

para saber si estaba lleno el XML, y son los datos que puse al principio

Luis
  • 0




IP.Board spam blocked by CleanTalk.