![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como interpretar XML desde delphi 2007
Hola. Soy uno más de los que estoy a vueltas con lo del famoso SII.
Estoy con la verificación del CIF y el nombre de los clientes y proveedores. Ya consigo hacer la petición y obtengo la respuesta en "bruto". Ahora lo que me gustaría es poder tratarla "elegantemente" y de una forma de que luego me sirviera para ocasiones futuras cuando tenga que interpretar otras respuestas de este tipo JSON. Yo las respuestas que consigo son: Código:
<?xml version="1.0"?> <env:Envelope xmlns:env="url" xmlns:xsd="url" xmlns:xsi="url"> <env:Body> <VNifV1Sal:VNifV1Sal xmlns:VNifV1Sal="url"> <VNifV1Sal:Nif>X11111111</VNifV1Sal:Nif> <VNifV1Sal:Nombre>ASTILLEROS GONDAN SA</VNifV1Sal:Nombre></VNifV1Sal:VNifV1Sal> </env:Body> </env:Envelope> Código:
<?xml version="1.0"?> <env:Envelope xmlns:env="url"> <env:Body> <env:Fault> <faultcode>env:Client</faultcode> <faultstring>Codigo[-1].No identificado</faultstring> </env:Fault> </env:Body> </env:Envelope> Última edición por Casimiro Notevi fecha: 19-06-2017 a las 10:20:32. |
#2
|
||||
|
||||
¿JSON Donde?
Por otro lado... Si quieres dar soporte a JSON desde D2007 te recomiendo uses SuperObject
__________________
Buena caza y buen remar... http://mivaler.blogspot.com |
#3
|
|||
|
|||
Y si no es json. ¿Qué se supone qué es? Y ¿con qué puedo interpretarlo?
¿Tengo que hacerlo a huevo buscando por contenido de cadena? Perdona por lo verde que estoy. |
#4
|
||||
|
||||
Cita:
Aunque si esto lo obtienes a partir de un servicio como SOAP, podrías por ejemplo usar el WSDL Importer para que él mismo te haga lo necesario.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#5
|
|||
|
|||
Cita:
Creo que ya tengo la llamada para la petición de datos y la variable donde luego obtener al respuesta: Código:
procedure TForm1.BtnEnvioSOAPClick(Sender: TObject); var Ent : VNifV1Ent2; Sal : VNifV1Sal; begin Ent := VNifV1Ent2.Create; Ent.Nif := 'xx'; Ent.Nombre := 'xxx'; sal := GetVNifV1(true,'',nil).VNifV1(Ent); sal.Free; ent.Free; end; ¿Podrías darme otro "empujoncito"?. Muchas gracias de nuevo. |
#6
|
|||
|
|||
Lo siento, pero no puedo editar mi mensaje anterior...
Lo que quería decir es que me sale ese mensaje de error con respecto al certificado. (Estoy con Delphi 2007) Otra posibilidad es que el XML de respuesta que si puedo conseguir de otra "manera" lo pueda meter en una variable de tipo VNifV1Sal para luego poder operar con ella. |
#7
|
|||
|
|||
Misterio con FindNode en Delphi 2007 ¿Bug?
Hola. Esto a vueltas con el famoso SII y con la verificación de los datos fiscales de los clientes y proveedores.
Para ello hago uso del webservice: https://www1.agenciatributaria.gob.e.../ws/VNifV2SOAP El caso es que envío la petición sin problema y recibo la respuesta también correctamente. El problema lo tengo cuando intento interpretar la respuesta: Código:
<?xml version="1.0"?> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <env:Body> <VNifV2Sal:VNifV2Sal xmlns:VNifV2Sal="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV2Sal.xsd"> <VNifV2Sal:Contribuyente> <VNifV2Sal:Nif>99999999R</VNifV2Sal:Nif> <VNifV2Sal:Nombre>ESPA/OL ESPA/OL JUAN</VNifV2Sal:Nombre> <VNifV2Sal:Resultado>NO IDENTIFICADO</VNifV2Sal:Resultado> </VNifV2Sal:Contribuyente> </VNifV2Sal:VNifV2Sal> </env:Body> </env:Envelope> Código:
procedure TForm1.BtnTratarXMLVariosClick(Sender: TObject); var lDocument : IXMLDocument; lNode, lNode2, lNode3, lNode4 : IXMLNode; i, j: integer; begin MemoResultadoVarios.Lines.Clear; // Cargo el resultado obtenido en un documento xml para luego recorrerlo lDocument := TXMLDocument.Create(nil); lDocument.LoadFromXML(UTF8Encode(MemoResVarios.Text)); // Me posiciono en el nodo que realmente tiene los datos que necesito. lnode := lDocument.ChildNodes.FindNode('env:Envelope'); if lnode <> nil then begin if RecursiveFindNodeValue(lnode, 'faultstring') <> '' then begin MemoResultadoVarios.Lines.add('Error: ' + RecursiveFindNodeValue(lnode, 'faultstring')); end else begin // Localizo el nodo con el cuerpo del mensaje xml LNode2 := lNode.ChildNodes.FindNode('env:Body'); // Me recorro todos los nodos hijos for j := 0 to lNode2.ChildNodes.Count - 1 do begin // Aguí voy poniendo en el memo los nombres que voy encontrando... MemoResultadoVarios.Lines.add(lNode2.ChildNodes[j].NodeName); // Y si algún nodo se llama como el que yo estoy buscanco, //se supone que estoy en el sitio que debo y buscando el nombre de nodo correcto If lNode2.ChildNodes[j].NodeName = 'VNifV2Sal:VNifV2Sal' then begin // Añado al log que lo encontré MemoResultadoVarios.Lines.add('Entré en el if'); // Ahora intento hacer la misma búsqueda con el FindNode LNode3 := lNode2.ChildNodes.FindNode('VNifV2Sal:VNifV2Sal'); // Y si no lo encuentro, entonces lo añado tambien al log if not Assigned(lNode3) then MemoResultadoVarios.Lines.add('lNode3 no asignado nulo'); end; end; end; end; end; Y el log que obtengo: Código:
VNifV2Sal:VNifV2Sal Entré en el if lNode3 no asignado nulo Algo similar me está pasando cuando intento interpretar las respuesta cada vez que envío las facturas al SII. https://www.clubdelphi.com/foros/sho...7&postcount=29 |
#8
|
||||
|
||||
He unido ambos temas, porque vienen a ser lo mismo.
Y no crees hilos repetidos, gracias ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#9
|
|||
|
|||
Muchas gracias.
|
#10
|
||||
|
||||
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
|||
|
|||
YA encontré el misterio con el FindNode
Pues eso, que ya encontré porque no me funcionaba el FindNode.
Por lo visto, para que funcione correctamente, todas las "ramas" del árbol tienen que empezar igual. Y para mi desgracia, los xml de respuesta que nos manda la AEAT no todos empiezan igual. Véase: Código:
<siiLRRC:IDFactura> <sii:IDEmisorFactura> <sii:NIF>10855497A</sii:NIF> </sii:IDEmisorFactura> <sii:NumSerieFacturaEmisor>A-451245B</sii:NumSerieFacturaEmisor> <sii:FechaExpedicionFacturaEmisor>01-01-2017</sii:FechaExpedicionFacturaEmisor> </siiLRRC:IDFactura> Código:
lNode4 := lNodeRegFactura.ChildNodes.FindNode('siiLRRC:IDFactura', '') |
#12
|
|||
|
|||
Aprovechando que he vuelto a revivir el hilo...
¿Alguien podría decirme si existe un FindNode "recursivo". Vamos que busque no solo en los nodos de primer nivel. Gracias y un saludo. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
crear un grafico en excel 2007 desde Delphi 2007 | Jose Manuel | Varios | 1 | 27-12-2013 19:56:30 |
Como abrir una caja registradora desde delphi 2007 | ingabraham | Varios | 5 | 04-01-2013 18:44:28 |
crear un trigger firebird desde delphi 2007 | ingabraham | Firebird e Interbase | 4 | 03-01-2013 10:46:10 |
Hyperlink en Word desde Delphi 2007 | Jose Manuel | Servers | 1 | 12-10-2011 15:28:34 |
Como interpretar WM_KEYDOWN | casacham | OOP | 3 | 14-04-2009 09:32:00 |
![]() |
|