Leer Xml (Factura electronica)

1,278 views
Skip to first unread message

Villicaña

unread,
Jul 22, 2010, 11:05:34 PM7/22/10
to Mundo Visual FoxPro
Hola alguien a podido leer desde fox el xml y sacar en cursores la
información contenida en el xml?

Una de las partes que estoy desarrollando es poder leer el xml y poder
mostrarlo ya sea en una forma o un reporte pero e tenido muchos
problemas ya que el esquema que maneja el xml de hacienda es muy
distinto a los xml que genera fox o que lee entonces ando sufriendo un
poco porque creo que voy a tener que hacer codigo para hacer esta
lectura.

Si alguien puede aportar algo se los Agradeceria mucho.

Emanuel Villicaña Villegas
www.durvill.com.mx

alexfox

unread,
Jul 23, 2010, 10:42:37 AM7/23/10
to Mundo Visual FoxPro
Hola

No soy ningun experto en el tema y de hecho apenas estoy empezando a
analizar lo de la facturacion electronica, sin embargo he leido poco
sobre el XMLDOM creo que esta es una buena opcion para solucionar tu
problema, en google encuentras informacion sobre el tema.

Saludos, espero te sirva de algo.

Villicaña

unread,
Jul 23, 2010, 11:39:35 AM7/23/10
to Mundo Visual FoxPro
La verdad e echo varias pruebas pero al parecer el xml que tiene el
sat mexico cuando se trata de usar XMLDOM marca error

TurbiSoft

unread,
Jul 23, 2010, 12:59:24 PM7/23/10
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


Juan Rojas C

unread,
Jul 23, 2010, 3:32:00 PM7/23/10
to mundovis...@googlegroups.com
Hola amigo, yo lo que hago es pasar todo el archivo xml a una variable y luego ir descomponiendo esa variable, aca te envio un pequeño ejemplo
 
JRCORONA

2010/7/23 TurbiSoft <vbsco...@hotmail.com>


--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.

Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com

PRUEBA.PRG
SEGMENT2.PRG
RESPUESTA.XML
Reply all
Reply to author
Forward
0 new messages