Muchas gracias por tu respuesta, Cid. Efectivamente, el problema era ése
(aparte de algunas cosillas más, relacionadas con el lío de estructuras
de datos necesarias para reflejar el XML).
Le verdad es que, para XML's pequeños, XML-INTO es una maravilla. Para
el que le interese, adjunto de nuevo el XML y el ILE RPG que lo parsea.
Al final del programa he añadido la recuperación de los 4 nodos del XML
que me interesaba recuperar.
Un saludo,
Potele
El 27/01/2015 20:54, Cid Fernández escribió:
Hola,
Según tenía entendido los nombres de las variables deben ser "exactamente"
los nombres de los Elementos.
En el .xml todos los elementos comienzan por "PFxxxx" y en el RPG no hay
ninguna variable con "PFxxx"
Prueba a poner todas las variables con "exactamente" el mismo nombre
(incluido Minúsculas/Mayúsculas, no sea que el XML-INTO haga case sensitive)
Saludos, Cid
-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Potele
Enviado el: martes, 27 de enero de 2015 11:43
Para: forum.help400
Asunto: Una de XML-INTO en ILE RPG
Buenas foreros,
Aquí va una pregunta para algún Scott Klement que haya por ahí ;-)
Estoy intentando parsear un documento XML utilizando la operación de ILE RPG
"XML-INTO", que carga un documento XML completo y lo mapea con las
estructuras de datos (DS) definidas en el RPG. Mi problema es que no consigo
definir correctamente dichas estructuras para que no me dé el error RNX0353
("El documento XML no coincide con la variable RPG") al ejecutar el
XML-INTO.
Adjunto fuente del RPG y del documento XML. Los nodos del XML que se pueden
repetir varias veces son PFdoc, PFremitente y PFfirmante. La ruta en la que
se encuentra el XML se recibe en el primer parámetro del RPG:
"$file_path".
Muchas gracias de antemano por vuestra ayuda.
Un saludo,
Potele
José de la Herran Núñez
Kordinazio Teknikoko Burua | Jefe del Área de Coordinación Técnica
Informazioaren Teknologien Saila Departamento de Tecnologías de la
Información
Tel: 945161614
Fax: 945161600
Vitoria-Gasteizko Udala. Ayuntamiento de Vitoria-Gasteiz VITORIA-GASTEIZ!
EUROPEAN GREEN CAPITAL 2012
------------------------------------------------------------
KONFIDENTZIALTASUNA
Komunikazio honen edukia eta honi erantsitako dokumentazio osoarena
konfidentziala da eta adierazitako jasotzaileari beste inori ez dagokio.
Zeu jasotzaile ez bazina, jakinaraz iezaguzu, mesedez, eta eskatu nahi
dizugu edukiaren berri inori ez esan eta mezua ezaba dezazula.
CONFIDENCIALIDAD
El contenido de esta comunicación, así como el de toda la documentación
anexa, es confidencial y va dirigido únicamente al destinatario del mismo.
En el supuesto de que usted no fuera el destinatario, le solicitamos que nos
lo indique y no comunique su contenido a terceros, procediendo a su
destrucción.
CONFIDENCIALITY
The content of this communication and any attached information is
confidential and exclusively for the use of the addressee.
If you are not the addressee, we ask you to notify to the sender and do not
pass its content to another person, and please be sure you destroy it.
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.
José de la Herran Núñez
Kordinazio Teknikoko Burua | Jefe del Área de Coordinación Técnica
Informazioaren Teknologien Saila
Departamento de Tecnologías de la Información
Tel: 945161614
Fax: 945161600
Vitoria-Gasteizko Udala. Ayuntamiento de Vitoria-Gasteiz
VITORIA-GASTEIZ! EUROPEAN GREEN CAPITAL 2012
------------------------------------------------------------
KONFIDENTZIALTASUNA
Komunikazio honen edukia eta honi erantsitako dokumentazio osoarena
konfidentziala da eta adierazitako jasotzaileari beste inori ez dagokio.
Zeu jasotzaile ez bazina, jakinaraz iezaguzu, mesedez, eta eskatu nahi dizugu
edukiaren berri inori ez esan eta mezua ezaba dezazula.
CONFIDENCIALIDAD
El contenido de esta comunicación, así como el de toda la documentación anexa, es confidencial y va dirigido únicamente al destinatario del mismo.
En el supuesto de que usted no fuera el destinatario, le solicitamos que nos lo indique y no comunique su contenido a terceros, procediendo a su destrucción.
CONFIDENCIALITY
The content of this communication and any attached information is confidential
and exclusively for the use of the addressee.
If you are not the addressee, we ask you to notify to the sender and do not
pass its content to another person, and please be sure you destroy it.
h dftactgrp(*no) bnddir('QC2LE')
h option (*nodebugio)
D PFpeticion DS QUALIFIED
D PFasunto 255A
D PFreferencia 30A
D PFtexto 2000A
D PFtipoFirma 15A
D PFaplicacion 30A
D PFtipoAccDev 10A
D PFaccDev 2000A
D PFtipoAccFir 10A
D PFaccionFir 2000A
D PFenviarYa 1A
D PFdocs LIKEDS(docus)
D PFremitentes LIKEDS(remits)
D PFfirmantes LIKEDS(firmants)
D PFrespuesta LIKEDS(respuesta)
D docus DS QUALIFIED
D PFdoc LIKEDS(doc) Dim(5)
D countPFdoc 5i 0 Inz
D remits DS QUALIFIED
D PFremit LIKEDS(rem) Dim(5)
D countPFremit 5i 0 Inz
D firmants DS QUALIFIED
D PFfirman LIKEDS(fir) Dim(5)
D countPFfirman 5i 0 Inz
D respuesta DS
D PFcodResult 5A
D PFtxtResult 255A
D PFhashPeti 10A
D doc DS
D PFurlDoc 255A
D PFmimeTypeDoc 30A
D PFnombreDoc 255A
D PFfirmable 1A
D PFhashDoc 10A
D rem DS
D PFdniRemit 15A
D fir DS
D PFdniFirmante 15A
D PFcargoFirman 15A
d $file_path S 255A
d $options S 100a varying
d ProgStatus sds
d Parms *PARMS
d ProgName *PROC
d ErrMsgID 40 46
d ErrMsg 91 169
d JobName 244 253
d Userid 254 263
d JobNumber 264 269
//
//----- Main Routine
//
c *entry plist
c parm $file_path
c parm rdo 5
c parm txtRdo 255
c parm hashPet 10
c parm hashDoc 10
*
/free
//
// Establecer opciones del parseo XML
//
$options = 'doc=file +
trim=all +
case=any +
countprefix=count +
allowextra=yes +
allowmissing=yes';
//
// Parsear con XML-INTO, que carga el XML completo en PFpeticion
//
xml-into PFpeticion %XML(%trim($file_path) : %trim($options));
//
// Recuperar los nodos que nos interesa del XML
//
rdo = PFpeticion.PFrespuesta.PFcodResult;
txtRdo = PFpeticion.PFrespuesta.PFtxtResult;
hashPet = PFpeticion.PFrespuesta.PFhashPeti;
hashDoc = PFpeticion.PFDocs.PFdoc(1).PFhashDoc;
/end-free
c eval *inlr = *on
c return
<?xml version="1.0" encoding="UTF-8"?>
<PFpeticion>
<PFasunto>Asunto 444</PFasunto>
<PFreferencia>referencia 444</PFreferencia>
<PFtexto>Texto 444</PFtexto>
<PFtipoFirma>CASCADA</PFtipoFirma>
<PFaplicacion>WEBSRV</PFaplicacion>
<PFtipoAccDev>WEB</PFtipoAccDev>
<PFaccDev>hola</PFaccDev>
<PFtipoAccFir>WEB</PFtipoAccFir>
<PFaccionFir>adios</PFaccionFir>
<PFenviarYa>S</PFenviarYa>
<PFdocs>
<PFdoc>
<PFurlDoc>/TMPUSR/Ejemplo.doc</PFurlDoc>
<PFmimeTypeDoc>doc</PFmimeTypeDoc>
<PFnombreDoc>Ejemplo.doc</PFnombreDoc>
<PFfirmable>S</PFfirmable>
<PFhashDoc>yyyyyyyyyy</PFhashDoc>
</PFdoc>
<PFdoc>
<PFurlDoc>/TMPUSR/Ejemplo2.doc</PFurlDoc>
<PFmimeTypeDoc>doc</PFmimeTypeDoc>
<PFnombreDoc>Ejemplo2.doc</PFnombreDoc>
<PFfirmable>N</PFfirmable>
<PFhashDoc>xxxxxxxxxx</PFhashDoc>
</PFdoc>
</PFdocs>
<PFremitentes>
<PFremit>
<PFdniRemit>1111111</PFdniRemit>
</PFremit>
<PFremit>
<PFdniRemit>22222222</PFdniRemit>
</PFremit>
</PFremitentes>
<PFfirmantes>
<PFfirman>
<PFdniFirmante>3333333</PFdniFirmante>
<PFcargoFirman>cargof1</PFcargoFirman>
</PFfirman>
<PFfirman>
<PFdniFirmante>4444444</PFdniFirmante>
<PFcargoFirman>cargof2</PFcargoFirman>
</PFfirman>
</PFfirmantes>
<PFrespuesta>
<PFcodResult>99999</PFcodResult>
<PFtxtResult>Texto resultado</PFtxtResult>
<PFhashPeti>adasfsfaws</PFhashPeti>
</PFrespuesta>
</PFpeticion>
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.