Hola a todos,
A ver...
Mis conocimientos de inform谩tica son los que son, y me gustar铆a saber como hacen Ustedes para recuperar valores recibidos en un XML.
Yo paso todo el XML a una array de 3 elementos y despu茅s busco en esa array.
Por ejemplo para la respuesta de Verifactu, yo lo hago as铆:
Y despu茅s para asignar el valor recuperado busco en la array y cojo el valor.
-Para un valor NO iterativo.
-Para un valor iterativo:
Donde...
Es que desde hace tiempo tengo la curiosidad de saber como lo hacen otros.
Muchas gracias
A ver...
Mis conocimientos de inform谩tica son los que son, y me gustar铆a saber como hacen Ustedes para recuperar valores recibidos en un XML.
Yo paso todo el XML a una array de 3 elementos y despu茅s busco en esa array.
Por ejemplo para la respuesta de Verifactu, yo lo hago as铆:
/* *********************************************************************************** */
FUNCTION aVFLoadResponse( AMPAARRA, cPathFitxerXML, lPregunta )
// Es rep cPathFitxerXML amb el path sencer,
// aTagIter son TAGs iteratius i han d'estar ordenats alfab猫ticament.
Local aTagIter 聽:= { { "/env:Envelope/env:Body/tikR:RespuestaRegFactuSistemaFacturacion/tikR:RespuestaLinea/", 0 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{ "/env:Envelope/env:Body/tikR:RespuestaRegFactuSistemaFacturacion/tikR:RespuestaLinea/tikR:CodigoErrorRegistro/", 0 }, ;
聽 聽 聽 聽 聽 聽 聽 聽 聽聽 聽 { "/env:Envelope/env:Body/tikR:RespuestaRegFactuSistemaFacturacion/tikR:RespuestaLinea/tikR:DescripcionErrorRegistro/", 0 } ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽}
Local aXml 聽 聽 聽:= {}
Local nContador := 0
aXml := LoadXml( 0, cPathFitxerXML, aTagIter )
/*
For nContador := 1 To Len( aXML )
聽 聽 Traza( 1, aXML[nContador][1], " : " , aXML[nContador][2] )
End
*/
Return aXml
/* *********************************************************************************** */-Para un valor NO iterativo.
cXmlDummy := "/env:Envelope/env:Body/env:Fault/faultcode/"
If ( nXml := AScan( aXML, { |eaXML| eaXml[1] = cXmlDummy } ) ) > 0
聽 聽 cXmlDummy := "/env:Envelope/env:Body/env:Fault/faultstring/"
聽 聽 nXml2 := AScan( aXML, { |eaXML| eaXml[1] = cXmlDummy } )
聽 聽 lErrorEnvio := .T.
聽 聽 nErrorEnvio := 10
聽 聽 oTdbfVERFAC:VF_ESTAT := nVF_ESTAT_EnviamentErroni()
聽 聽 oTdbfVERFAC:ESTAENVI := "Error en el env铆o."
聽 聽 cNewVFErro( AMPAARRA, ;
聽 聽 聽 聽 聽 聽 聽 聽 oTDbfVFErro, ;
聽 聽 聽 聽 聽 聽 聽 聽 oTdbfVERFAC:CODIVEFA, ;
聽 聽 聽 聽 聽 聽 聽 聽 Nil, ;
聽 聽 聽 聽 聽 聽 聽 聽 Nil, ;
聽 聽 聽 聽 聽 聽 聽 聽 If( nXml > 0, aXml[nXml][2], Nil ), ;
聽 聽 聽 聽 聽 聽 聽 聽 If( nXml2 > 0, aXml[nXml2][2], Nil ) )
EndIf 聽 聽While lSetDbfFromVF_RespuestaLinea( AMPAARRA, oTdbfVERFAC, oTDbfVFRegi, oTdbfVFERRO, aXml, ++nItem )
聽 聽 End/* *********************************************************************************** */
FUNCTION lSetDbfFromVF_RespuestaLinea( AMPAARRA, oTdbfVERFAC, oTDbfVFRegi, oTdbfVFERRO, aXml, nItemRL )
Local lResposta := .F.
Local cItem_A 聽 := "/env:Envelope/env:Body/tikR:RespuestaRegFactuSistemaFacturacion/tikR:RespuestaLinea"
Local cItem_B 聽 := "/tikR:IDFactura/tik:NumSerieFactura/"
Local cItem_C 聽 := ""
Local nXmlRL 聽 聽:= 0
Local nXml 聽 聽 聽:= 0
Local nItem 聽 聽 := 0
cItem_A := cItem_A + "<" + AllTrim(Str( nItemRL, 10, 0 ) ) + ">"
cItem_C := cItem_A + cItem_B
If ( nXmlRL := AScan( aXML, { |eaXmlRL| eaXmlRL[1] = cItem_C } ) ) > 0
聽 聽 聽 聽 cItem_B 聽:= "/tikR:EstadoRegistro/"
聽 聽 聽 聽 cItem_C := cItem_A + cItem_B
聽 聽 聽 // Una captura NO iterativa dentro de ESTA iterativa.
聽 聽 聽 聽 If ( nXml := AScan( aXML, { |eaXML| eaXml[1] = cItem_C } ) ) > 0
聽 聽 聽 聽 聽 聽 oTDbfVFRegi:ESTAREGI := aXml[nXml][2]
聽 聽 聽 聽 EndIf
聽 聽 聽 聽 oTDbfVFRegi:VF_ESTAT := nVF_ESTAT_Acabat()
聽 聽 聽 聽// Una captura ITERATIVA 聽dentro de ESTA iteraci贸n.
聽 聽 聽 聽 While lSetDbfFromVF_ErrorRegistro( AMPAARRA, oTdbfVERFAC, oTDbfVFRegi, oTdbfVFERRO, aXml, cItem_A, ++nItem )
聽 聽 聽 聽 聽 聽 oTDbfVFRegi:VF_ESTAT := nVF_ESTAT_Erroni()
聽 聽 聽 聽 End
聽 聽 聽 // Una captura NO iterativa dentro de ESTA iterativa.
聽 聽 聽 聽 cItem_B 聽:= "/tikR:RegistroDuplicado/tik:IdPeticionRegistroDuplicado/"
聽 聽 聽 聽 cItem_C := cItem_A + cItem_B
聽 聽 聽 聽 If ( nXml := AScan( aXML, { |eaXML| eaXml[1] = cItem_C } ) ) > 0
聽 聽 聽 聽 聽 聽 oTDbfVFRegi:IDPETICI := aXml[nXml][2]
聽 聽 聽 聽 EndIf
聽 聽 聽 聽 oTDbfVFRegi:Save()
聽 聽 聽 聽 lResposta := .T.
聽 聽 EndIf
EndIf
Return lResposta
/* *********************************************************************************** */Muchas gracias
Un Saludo
Carlos G.
FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home