TurbiSoft
unread,Jul 23, 2010, 12:59:24 PM7/23/10Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Mundo Visual FoxPro
Saludo, debemos tener en cuenta que fox tiene algunas limitaciones en
cuanto al XML anidado, debido a que foxpro es relacional y XML es
gerarquico.
De ahi que cuando algunos texto anidados XML, foxpro almacena estos
nodos en campos memos.
Te puedo sugerir que extraigas el XML del objeto DOM, y entonces lo
recorra por nodos y extraiga la informacion y la almacene a un cursor
proviamente creado y con la extructura deseada,
te anexo un ejemplo breve:
*** importamos la informacion del XML
If Not Cargar_oDOM(oDocDep)
OFORM.Updatestatus("No se pudo Cargar transacciones del objeto
oSDEP",Program())
Return LNRETURN
Endif
....
...
*********************
Procedure Cargar_oDOM
*********************
* Carga Un Objeto DOM con nuevas remesas
Lparameter oDoc As msxml2.DOMDocument.4.0
oDoc = Createobject("MSXML2.DOMDocument.4.0")
oDoc.validateOnParse = .F. && No valida al cargar el doc. xml
oDoc.Async = .F. && Espera hasta que se carguen todas las remesas
del xml
lcXML=Filetostr("SDEP.xml")
*If oDoc.Load("SDEP.xml") Then
If oDoc.LoadXML(lcXML) Then
*' El documento se ha cargado correctamente.'
=GetRemesas(oDoc.childNodes,0,"")
* Clear
** Aqui reemplazo los campos con los valores generales de la
respuestas, fecha y hora
Select MTTEMP
Replace MTTEMP.CARRIERID With "T0029" All
Replace MTTEMP.COPCODE With
Iif(Vartype(tmpSDEP.opcode)="N",Alltrim(Str(tmpSDEP.opcode)),Alltrim(tmpSDEP.opcode))
All
Replace MTTEMP.CPROCESS_MSG With tmpSDEP.process_msg All
Replace MTTEMP.CERROR_FULL With tmpSDEP.error_param_full_name All
* La Fecha viene en formato YYYYMMDD
cFecha = Substr(Alltrim(Str(tmpSDEP.process_dt)),
7,2)+"/"+Substr(Alltrim(Str(tmpSDEP.process_dt)),
5,2)+"/"+Substr(Alltrim(Str(tmpSDEP.process_dt)),1,4)
Set Date Dmy
Replace MTTEMP.DTRNDATE With Ctod(cFecha) All
Set Date To YMD
* la hora
SS = Right(Alltri(Str(tmpSDEP.process_tm)),2)
MM = Substr(Right(Alltrim(Str(tmpSDEP.process_tm)),4),1,2)
HH =
Iif(Len(Alltrim(Str(tmpSDEP.process_tm)))=5,Substr(Alltrim(Str(tmpSDEP.process_tm)),
1,1),Substr(Alltrim(Str(tmpSDEP.process_tm)),1,2))
cHora = HH+":"+MM+":"+SS
Replace MTTEMP.ctrntime With cHora All
Else
* No se ha cargado el documento.
OFORM.Updatestatus("No se ha podido cargar el documento
DOM",Program())
Endif
Endproc
*********************
Procedure GetRemesas
*********************
Parameters Nodes As msxml2.IXMLDOMNodeList,Indent,cConfirmation
Local oDeposit As msxml2.IXMLDOMNode
* oDeposit=Createobject("MSXML2.DOMDocument.4.0")
If Vartype(cConfirmation) <> "C"
Store Space(11) To cConfirmation
Endif
Select MTTEMP
Indent = Indent + 2
For Each oDeposit In Nodes
If Upper(oDeposit.nodeName)="CONFIRMATION_NM" And Not
Empty(oDeposit.Text) And Not Isnull(oDeposit.Text) ;
And Vartype(oDeposit.Text) <> "O"
* ? Space(Indent) + " Nombre: " + Transform(oDeposit.nodeName) + "
Padre : " +Transform(oDeposit.parentNode.nodeName)
* ? Space(Indent) + "nodeTypeString : "
+Transform(oDeposit.nodeTypeString)
* ? Space(Indent) + " NodeType " +Transform(oDeposit.nodeType)
* ? Space(Indent) + "XML " +Transform(oDeposit.XML)
* ? Space(Indent) + "Text " +Transform(oDeposit.Text)
* ? Space(Indent) + "NodeValue " +Transform(oDeposit.nodeValue)
* ? ""
Select MTTEMP
Append Blank
* Replace MTTEMP.ccarcons With oDeposit.Text
Replace MTTEMP.cRemRef With oDeposit.Text
Endif
Select MTTEMP
If Upper(oDeposit.nodeName)="SERVICE_CD" And Not Empty(oDeposit.Text)
And Not Isnull(oDeposit.Text) And Vartype(oDeposit.Text) <> "O"
Replace MTTEMP.cSERVICE_CD With oDeposit.Text
Endif
** Codigo tipo de Operacion
If Upper(oDeposit.nodeName)="PAYMENT_TYPE_CD" And Not
Empty(oDeposit.Text) And Not Isnull(oDeposit.Text) And
Vartype(oDeposit.Text) <> "O"
Replace MTTEMP.cPAYMENT_T With oDeposit.Text
Replace MTTEMP.ccode With oDeposit.Text
Endif
If Upper(oDeposit.nodeName)="ORIG_COUNTRY_CD" And Not
Empty(oDeposit.Text) And Not Isnull(oDeposit.Text) And
Vartype(oDeposit.Text) <> "O"
Replace MTTEMP.cORIG_COTRY With oDeposit.Text
Endif