FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Visor o leer XML...(Solucionado)
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Visor o leer XML
Posted: Mon Aug 18, 2014 09:33 PM
karinha wrote:tArray.prg y tArray.ch

http://fivetechsupport.com/forums/viewtopic.php?f=6&t=13899&start=0

Saludos.



Gracias Ing. Karinha, te agradezco la informacion de la clase TArray, con eso ya debo empezar a adaptarlo a mi sistema,el archivo xml, lo subi, desde principio, descargalo desde ahi, que viene adjunto, o solo copia y create test.xml.

Saludos y nuevamente gracias a todos.

Atte: Adrian C. C.
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Re: Visor o leer XML
Posted: Mon Aug 18, 2014 09:49 PM

Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos

Luis Fernando Rubio Rubio
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Visor o leer XML
Posted: Tue Aug 19, 2014 12:06 AM
derpipu wrote:Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos


Hola Ing. Luis Fernando, buenas tardes como esta, le envio cordial saludos.

Tengo una peque帽a duda, y como resolverlo, y como ver las estructuras ,si esta limitada o no.!

Pasa que en xml, en emisor, encuentro como domiciliofiscal y en receptor domicilio, y con variables diferentes, pero al parecer no encuentra o valida toda la palabra completa, que el primer palabra reconoce como "domicilio", cuando continua fiscal, no se si este limitado, pero en oDatos, me muestra domicilio erroneo.

Pongo lo que quiero decir:

Code (fw): Select all Collapse
// EMISOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cEmiCalle  := pcValue

 // RECEPTOR
 ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cRecCalle  := pcValue


Que se puede hacer en este caso, seria las estructuras de TArray???.

Esperando contar con tu apoyo Ing. Luis Fernando.

Saludos

Atte: Adrian C. C.
acc69@hotmail.com
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Visor o leer XML
Posted: Tue Aug 19, 2014 02:46 PM
ACC69 wrote:
derpipu wrote:Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos


Hola Ing. Luis Fernando, buenas tardes como esta, le envio cordial saludos.

Tengo una peque帽a duda, y como resolverlo, y como ver las estructuras ,si esta limitada o no.!

Pasa que en xml, en emisor, encuentro como domiciliofiscal y en receptor domicilio, y con variables diferentes, pero al parecer no encuentra o valida toda la palabra completa, que el primer palabra reconoce como "domicilio", cuando continua fiscal, no se si este limitado, pero en oDatos, me muestra domicilio erroneo.

Pongo lo que quiero decir:

Code (fw): Select all Collapse
// EMISOR
聽ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cEmiCalle 聽:= pcValue

聽// RECEPTOR
聽ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cRecCalle 聽:= pcValue


Que se puede hacer en este caso, seria las estructuras de TArray???.

Esperando contar con tu apoyo Ing. Luis Fernando.

Saludos

Atte: Adrian C. C.
acc69@hotmail.com


Esta es la imagen, por el que ya tengo algo avanzado que lee xml y extrae datos gracias a la rutina del Ing. Luis Fernando,solo que hay inconveniente,de la longitud de caracteres de "domicilio" a "domiciliofiscal" que al procesar, me toma la primera frase "domicilio" sin llegar a procesar "...fiscal", habria que ver que solucion darle.



Ya luego pongo el codigo, hasta solucionar ese peque帽o inconveniente.

Saludos y buen dia.!

Atte: Adrian C. C.
acc69@hotmail.com
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Visor o leer XML.. (Solucionado)
Posted: Tue Aug 19, 2014 03:53 PM
ACC69 wrote:
ACC69 wrote:
derpipu wrote:Hola, denme 30 minutos para estar en un lugar que me permita subir archivos por FTP a mi servidor y les paso los archivos necesarios para sus pruebas...

Saludos


Hola Ing. Luis Fernando, buenas tardes como esta, le envio cordial saludos.

Tengo una peque帽a duda, y como resolverlo, y como ver las estructuras ,si esta limitada o no.!

Pasa que en xml, en emisor, encuentro como domiciliofiscal y en receptor domicilio, y con variables diferentes, pero al parecer no encuentra o valida toda la palabra completa, que el primer palabra reconoce como "domicilio", cuando continua fiscal, no se si este limitado, pero en oDatos, me muestra domicilio erroneo.

Pongo lo que quiero decir:

Code (fw): Select all Collapse
// EMISOR
聽ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cEmiCalle 聽:= pcValue

聽// RECEPTOR
聽ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO" .AND. UPPER(ALLTRIM(pcKey))="CALLE" poDatos:cRecCalle 聽:= pcValue


Que se puede hacer en este caso, seria las estructuras de TArray???.

Esperando contar con tu apoyo Ing. Luis Fernando.

Saludos

Atte: Adrian C. C.
acc69@hotmail.com


Esta es la imagen, por el que ya tengo algo avanzado que lee xml y extrae datos gracias a la rutina del Ing. Luis Fernando,solo que hay inconveniente,de la longitud de caracteres de "domicilio" a "domiciliofiscal" que al procesar, me toma la primera frase "domicilio" sin llegar a procesar "...fiscal", habria que ver que solucion darle.



Ya luego pongo el codigo, hasta solucionar ese peque帽o inconveniente.

Saludos y buen dia.!

Atte: Adrian C. C.
acc69@hotmail.com



Listoo ya quedo, ya muestra bien los datos de la direccion del emisor,como la direccion del receptor, ya el resto, ya es cuestion mia. :-)
Adjunto la imagen y el prg, como queria y con browse .

Gracias Ing. Luis Fernando ,le agradezco mil, que me haya ayudado.



Saludos cordiales .
Code (fw): Select all Collapse
#include "FiveWin.ch"
#Include "xBrowse.ch"
#include "TArray.ch"

REQUEST  DbfCdx, DbfFpt, RPreview
EXTERNAL OrdKeyCount, OrdKeyGoTo, OrdKeyNo

Static oDlg, oSay, oBrw, aDatos

//------------------------------------------------------------------------------
FUNCTION PRINCIPAL()
 Local aGradBarSelFocus:= { { 1, RGB(252,232,171)   , RGB(248,195, 34) } }
 Local aGradBarSel     := {{1, RGB(252,235, 184), RGB(251,222,88)}}

 Local hFile    := FOpen( "test.xml" )
 Local oXmlDoc  := TXmlDocument():New( hFile )
 Local oXmlIter := TXmlIterator():New( oXmlDoc:oRoot ), oTagActual, cTagname, oDatos
 Local cDirecc

 SET EXCLUSIVE OFF
 SET 3DLOOK ON
 SET DELETED ON
 SET CONFIRM ON
 SET EPOCH TO 1969
 SET DATE BRITISH

 SetResDebug(.T.) // Al inicio ...

 oDatos := NIL

 DEFINE STRUCT oDatos
   STRUCT FIELD cEmiNom   INIT ""
   STRUCT FIELD cEmiRFC   INIT ""
   STRUCT FIELD cExpedidoen INIT ""
   STRUCT FIELD cCalle INIT ""
   STRUCT FIELD cNoExt INIT ""
   STRUCT FIELD cColonia INIT ""
   STRUCT FIELD cMunicip INIT ""
   STRUCT FIELD cEstado INIT ""
   STRUCT FIELD cPais INIT ""
   STRUCT FIELD cCodPos INIT ""
   STRUCT FIELD cRegFisc INIT ""
   STRUCT FIELD cLugExp INIT ""

   STRUCT FIELD cRecNom   INIT ""
   STRUCT FIELD cRecRFC   INIT ""
   STRUCT FIELD cTipoCo   INIT ""
   STRUCT FIELD cFecha    INIT ""
   STRUCT FIELD cSerie    INIT ""
   STRUCT FIELD cFolio    INIT ""

   STRUCT FIELD cRCalle   INIT ""
   STRUCT FIELD cRNoExt   INIT ""
   STRUCT FIELD cRColonia INIT ""
   STRUCT FIELD cRMunicip INIT ""
   STRUCT FIELD cREstado  INIT ""
   STRUCT FIELD cRPais    INIT ""
   STRUCT FIELD cRCodPos  INIT ""

   STRUCT FIELD cMoneda   INIT ""
   STRUCT FIELD cTCambio  INIT ""
   STRUCT FIELD cfPago    INIT ""
   STRUCT FIELD cmPago    INIT ""
   STRUCT FIELD cCtaPago  INIT ""

   STRUCT FIELD nCantidad   INIT 0.0000
   STRUCT FIELD cDescrip  INIT ""
   STRUCT FIELD cUnidad  INIT ""
   STRUCT FIELD nPrecUnit   INIT 0.0000
   STRUCT FIELD nImporte   INIT 0.0000

   STRUCT FIELD nSubtot   INIT 0.0000
   STRUCT FIELD nDescto   INIT 0.0000
   STRUCT FIELD nTotIT    INIT 0.0000
   STRUCT FIELD nTotIR    INIT 0.0000
   STRUCT FIELD nTotal    INIT 0.0000

   STRUCT FIELD cOrden    INIT ""

 END STRUCT

 oDatos:Zap()

 aDatos := {}

 DO WHILE .T.
     oTagActual = oXmlIter:Next()

     If oTagActual != nil
         HEval( oTagActual:aAttributes, { | cKey, cValue | Guarda_XML_Valores( oDatos, cKey, cValue, oTagActual:cName ) } )
     Else
         Exit
     Endif
 ENDDO

 FClose( hFile )

 oSay   := ARRAY(21)

 DEFINE DIALOG oDlg RESOURCE "VISOR_XML" TITLE "Visor XML" // ICON oICON // COLOR CLR_BLUE
  REDEFINE SAY oSay[01] PROMPT oDatos:cEmiNom      ID 101 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[02] PROMPT oDatos:cEmiRFC      ID 102 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[03] PROMPT oDatos:cCalle       ID 103 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[04] PROMPT oDatos:cExpedidoen  ID 104 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[05] PROMPT oDatos:cRegFisc     ID 105 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[06] PROMPT oDatos:cLugExp     ID 106 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[07] PROMPT oDatos:cFecha     ID 109 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[08] PROMPT oDatos:cSerie     ID 110 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[09] PROMPT oDatos:cFolio     ID 111 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[10] PROMPT oDatos:cFPago     ID 112 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[11] PROMPT oDatos:cMPago     ID 113 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[12] PROMPT oDatos:cCtaPago   ID 114 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[13] PROMPT oDatos:cRecNom    ID 115 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[14] PROMPT oDatos:cRecRFC    ID 116 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[15] PROMPT oDatos:cRCalle    ID 117 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE XBROWSE oBrw ID 120 OF oDlg ;
           HEADERS 'Cantidad','Descripci贸n','Unidad','P. Unitario','Importe' ;
           COLSIZES 60,260,85,85,85 ;
           PICTURES "999"           ,;
                    "@X"            ,;
                    "@X"            ,;
                    "999,999.99"      ,;
                    "999,999,999.99"   ;
           ARRAY aDatos FOOTERS AUTOCOLS

    WITH OBJECT oBrw
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW  //_HIGHLROWMS
      :nColDividerStyle:=LINESTYLE_LIGHTGRAY
      :nRowDividerStyle:=LINESTYLE_LIGHTGRAY

      :bClrSel       := {|| { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
      :bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
      :lKinetic      := .f.
      :lContrastClr  := .f.  //para que no cambie color de texto automaticamente segun intensidad del fondo

      :SetArray(aDatos)

      oBrw:Refresh()
    END

    REDEFINE SAY oSay[16] PROMPT oDatos:cMoneda  ID 121 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[17] PROMPT oDatos:cTCambio ID 122 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[18] PROMPT oDatos:nSubtot  ID 123 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[19] PROMPT oDatos:nDescto  ID 124 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[20] PROMPT oDatos:nTotIT   ID 126 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[21] PROMPT oDatos:nTotal   ID 127 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1
 ACTIVATE DIALOG oDlg CENTER  //ON INIT Inicia()
RETURN NIL

//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( poDatos, pcKey, pcValue, pcTagName )
 //? cTagName, cTagData, pcKey, pcValue
 //? pcTagName, pcKey, pcValue

 IF        UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="MONEDA";                    poDatos:cMoneda  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="TIPOCAMBIO";                poDatos:cTCambio := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="FECHA";                     poDatos:cFecha   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="SERIE";                     poDatos:cSerie   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="FOLIO";                     poDatos:cFolio   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="FORMADEPAGO";               poDatos:cfPago   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="METODODEPAGO";              poDatos:cmPago   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="NUMCTAPAGO";                poDatos:cCtaPago := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="LUGAREXPEDICION";           poDatos:cLugExp   := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="SUBTOTAL";                  poDatos:nSubtot  := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="DESCUENTO";                 poDatos:nDescto  := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:COMPROBANTE,COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey))="TOTAL";                     poDatos:nTotal   := VAL(pcValue)

    // EMISOR
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:EMISOR,EMISOR"           .AND. UPPER(ALLTRIM(pcKey))="NOMBRE";                    poDatos:cEmiNom  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:EMISOR,EMISOR"           .AND. UPPER(ALLTRIM(pcKey))="RFC";                       poDatos:cEmiRFC  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))="CFDI:DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="CALLE";           poDatos:cCalle  := pcValue   // Solucionado
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="NOEXTERIOR";      poDatos:cNoExt  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="COLONIA";         poDatos:cColonia := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="MUNICIPIO";       poDatos:cMunicip  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="ESTADO";          poDatos:cEstado  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="PAIS";            poDatos:cPais  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIOFISCAL,DOMICILIOFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="CODIGOPOSTAL";    poDatos:cCodPos  := pcValue

    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:EXPEDIDOEN,EXPEDIDOEN"   .AND. UPPER(ALLTRIM(pcKey))="CALLE";                     poDatos:cExpedidoen  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:REGIMENFISCAL,REGIMENFISCAL"   .AND. UPPER(ALLTRIM(pcKey))="REGIMEN";             poDatos:cRegFisc  := pcValue

    // RECEPTOR
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:RECEPTOR,RECEPTOR"     .AND. UPPER(ALLTRIM(pcKey))="NOMBRE";                    poDatos:cRecNom  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:RECEPTOR,RECEPTOR"     .AND. UPPER(ALLTRIM(pcKey))="RFC";                       poDatos:cRecRFC  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))="CFDI:DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="CALLE";                     poDatos:cRCalle  := pcValue   // Solucionado
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="NOEXTERIOR";      poDatos:cRNoExt  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="COLONIA";         poDatos:cRColonia := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="MUNICIPIO";       poDatos:cRMunicip  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="ESTADO";          poDatos:cREstado  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="PAIS";            poDatos:cRPais  := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:DOMICILIO,DOMICILIO"   .AND. UPPER(ALLTRIM(pcKey))="CODIGOPOSTAL";    poDatos:cRCodPos  := pcValue

    // IMPUESTOS
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:IMPUESTOS,IMPUESTOS"     .AND. UPPER(ALLTRIM(pcKey))="TOTALIMPUESTOSTRASLADADOS"; poDatos:nTotIT   := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:IMPUESTOS,IMPUESTOS"     .AND. UPPER(ALLTRIM(pcKey))="TOTALIMPUESTOSRETENIDOS";   poDatos:nTotIR   := VAL(pcValue)

    // Conceptos
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="CANTIDAD";                 poDatos:nCantidad := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="DESCRIPCION";              poDatos:cDescrip := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="UNIDAD";                   poDatos:cUnidad := pcValue
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="VALORUNITARIO";            poDatos:nPrecUnit := VAL(pcValue)
    ELSEIF UPPER(ALLTRIM(pcTagName))$"CFDI:CONCEPTO,CONCEPTO"     .AND. UPPER(ALLTRIM(pcKey))="IMPORTE";                  poDatos:nImporte := VAL(pcValue)

    // Carga aDatos en arreglo para TXBrowse
    AADD(aDatos, { poDatos:nCantidad ,;
                   poDatos:cDescrip  ,;
                   poDatos:cUnidad   ,;
                   poDatos:nPrecUnit ,;
                   poDatos:nImporte    })

 ENDIF
RETURN(NIL)



Saludos y gracias los que me ayudaron.

Atte: Adrian C. C.
acc69@hotmail.com
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Re: Visor o leer XML...(Solucionado)
Posted: Tue Aug 19, 2014 04:10 PM

Adrian, me da gusto que haya salido y que ademas nos retroalimentes con tu colaboracion corregida, y asi nos servira mucho a todos...

Luis Fernando Rubio Rubio
Posts: 670
Joined: Wed Oct 19, 2005 06:41 PM
Re: Visor o leer XML...(Solucionado)
Posted: Tue Aug 19, 2014 05:32 PM

Adrian gracias por ponerlo al alcance de todos
seria mucha molestia si posteas el archivo de recursos .rc ?

saludos cordiales

Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Visor o leer XML...(Solucionado)
Posted: Tue Aug 19, 2014 07:45 PM
wilsongamboa wrote:Adrian gracias por ponerlo al alcance de todos
seria mucha molestia si posteas el archivo de recursos .rc ?

saludos cordiales


Hola Ing. Luis Fernando, gracias a ti, por la clase y la rutina de extraer datos, que por cierto, no me sabia de esa clase maravillosa TArray que te crea por la nube temporal ,se podria decir :-) , es muy buena sin necesidad de crear dbf temporal, que es lo que tenia en mente, pero no fue necesario por la clase de TArray,aunque no tenga ejemplos de usar esta clase,pero se te agradece Ing. Luis Fernando.

Saludos .

Hola Wilson te paso el archivo visor_xml.rc creado desde Pelles C, que podras descargar o copiar y pegarlo a tu archivo .rc.

https://dl.dropboxusercontent.com/u/110 ... or_XML.rar
https://dl.dropboxusercontent.com/u/110661435/Visor_XML.rar


Code (fw): Select all Collapse
// RESOURCE SCRIPT generated by "Pelles C for Windows, version 7.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US

VISOR_XML DIALOGEX DISCARDABLE 6, 18, 574, 342
STYLE DS_SHELLFONT|WS_POPUP|DS_MODALFRAME|DS_CONTEXTHELP|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Dialog"
FONT 8, "Tahoma", 0, 0, 1
{
  CONTROL "Datos Emisor y Receptor", 4001, "Button", BS_GROUPBOX, 0, 0, 592, 84
  CONTROL "", 4002, "Button", BS_GROUPBOX, 0, 84, 556, 180
  CONTROL "RFC:", 4003, "Static", WS_GROUP, 4, 16, 40, 8
  CONTROL "Direcci贸n:", 4004, "Static", WS_GROUP, 4, 24, 40, 8
  CONTROL "Expedido en:", 4005, "Static", WS_GROUP, 4, 36, 44, 8
  CONTROL "Regimen Fiscal:", 4006, "Static", WS_GROUP, 4, 48, 52, 8
  CONTROL "Lugar de Expedicion:", 4007, "Static", WS_GROUP, 4, 60, 68, 8
  CONTROL "Telefono:", 4008, "Static", WS_GROUP, 4, 72, 40, 8
  CONTROL "Correo:", 4009, "Static", WS_GROUP, 128, 72, 40, 8
  CONTROL "Fecha:", 4010, "Static", WS_GROUP, 344, 8, 40, 8
  CONTROL "Serie:", 4011, "Static", WS_GROUP, 344, 20, 40, 8
  CONTROL "Folio:", 4012, "Static", WS_GROUP, 348, 36, 40, 8
  CONTROL "Forma de Pago:", 4013, "Static", WS_GROUP, 348, 48, 52, 8
  CONTROL "Metodo de Pago:", 4014, "Static", WS_GROUP, 348, 56, 56, 8
  CONTROL "No. de Cuenta:", 4015, "Static", WS_GROUP, 348, 68, 52, 8
  CONTROL "101", 101, "Static", WS_GROUP, 92, 4, 236, 8
  CONTROL "102", 102, "Static", WS_GROUP, 40, 16, 184, 8
  CONTROL "103", 103, "Static", WS_GROUP, 44, 24, 188, 8
  CONTROL "104", 104, "Static", WS_GROUP, 48, 36, 184, 8
  CONTROL "105", 105, "Static", WS_GROUP, 60, 48, 176, 8
  CONTROL "106", 106, "Static", WS_GROUP, 72, 60, 164, 8
  CONTROL "107", 107, "Static", WS_GROUP, 36, 72, 40, 8
  CONTROL "108", 108, "Static", WS_GROUP, 156, 72, 40, 8
  CONTROL "109", 109, "Static", WS_GROUP, 388, 8, 188, 8
  CONTROL "110", 110, "Static", WS_GROUP, 388, 20, 40, 8
  CONTROL "111", 111, "Static", WS_GROUP, 396, 36, 40, 8
  CONTROL "112", 112, "Static", WS_GROUP, 404, 48, 156, 8
  CONTROL "113", 113, "Static", WS_GROUP, 404, 56, 156, 8
  CONTROL "114", 114, "Static", WS_GROUP, 400, 68, 96, 8
  CONTROL "120", 120, "TXBrowse", WS_TABSTOP|0x00a00000, 4, 188, 422, 72
  CONTROL "", 4016, "Button", BS_GROUPBOX, 4, 268, 524, 72
  CONTROL "Moneda:", 4017, "Static", WS_GROUP, 8, 280, 40, 8
  CONTROL "Tipo de Cambio:", 4018, "Static", WS_GROUP, 8, 296, 40, 8
  CONTROL "SubTotal:", 4019, "Static", WS_GROUP, 220, 280, 40, 8
  CONTROL "Descto:", 4020, "Static", WS_GROUP, 220, 292, 40, 8
  CONTROL "Impto Retenido:", 4021, "Static", WS_GROUP, 220, 304, 56, 8
  CONTROL "I.V.A.:", 4022, "Static", WS_GROUP, 220, 316, 40, 8
  CONTROL "Total:", 4023, "Static", WS_GROUP, 220, 328, 40, 8
  CONTROL "121", 121, "Static", WS_GROUP, 48, 280, 40, 8
  CONTROL "122", 122, "Static", WS_GROUP, 48, 296, 40, 8
  CONTROL "123", 123, "Static", SS_RIGHT|WS_GROUP, 276, 280, 40, 8
  CONTROL "124", 124, "Static", SS_RIGHT|WS_GROUP, 276, 292, 40, 8
  CONTROL "125", 125, "Static", SS_RIGHT|WS_GROUP, 276, 304, 40, 8
  CONTROL "126", 126, "Static", SS_RIGHT|WS_GROUP, 276, 316, 40, 8
  CONTROL "127", 127, "Static", SS_RIGHT|WS_GROUP, 276, 328, 40, 8
  CONTROL "Cliente:", 4024, "Static", WS_GROUP, 4, 92, 40, 8
  CONTROL "R.F.C.:", 4025, "Static", WS_GROUP, 4, 108, 40, 8
  CONTROL "Direcci贸n:", 4026, "Static", WS_GROUP, 4, 124, 40, 8
  CONTROL "115", 115, "Static", WS_GROUP, 40, 92, 272, 8
  CONTROL "116", 116, "Static", WS_GROUP, 40, 108, 64, 8
  CONTROL "117", 117, "Static", WS_GROUP, 40, 124, 272, 8
}



Saludos a todos y nuevamente gracias Ing. Luis Fernando.

Atte: Adrian C. C.
acc69@hotmail.com
Posts: 670
Joined: Wed Oct 19, 2005 06:41 PM
Re: Visor o leer XML...(Solucionado)
Posted: Wed Aug 20, 2014 07:00 PM

Adrian muchas gracias

Wilson

Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Visor o leer XML...(Solucionado)
Posted: Wed Aug 20, 2014 07:44 PM
wilsongamboa wrote:Adrian muchas gracias

Wilson



De nada Wilson.
Saludos.


Mis estimados, para seleccion de archivos .xml, pongo imagen, y peque帽as modificaciones .

Imagen


Codigo
Code (fw): Select all Collapse
#include "FiveWin.ch"
#Include "xBrowse.ch"
#include "TArray.ch"

Static oDlg, oSay, oBrw, oDato, aDatos, oFnt1, oBtn
Static cDirec1, cDirec2

//------------------------------------------------------------------------------
FUNCTION PRINCIPAL()
 Local aGradBarSelFocus:= {{ 1, RGB(252,232,171) , RGB(248,195, 34) }}
 Local aGradBarSel     := {{ 1, RGB(252,235, 184), RGB(251,222,88) }}

 SET EXCLUSIVE OFF
 SET 3DLOOK ON
 SET DELETED ON
 SET CONFIRM ON
 SET EPOCH TO 1969
 SET DATE BRITISH

 SetResDebug(.T.) // Al inicio ...

 oDato := NIL

 DEFINE STRUCT oDato
   // "Comprobante"
   STRUCT FIELD cVersion   INIT ""
   STRUCT FIELD cSerie     INIT ""
   STRUCT FIELD cFolio     INIT ""
   STRUCT FIELD cFecha     INIT ""
   STRUCT FIELD cfPago     INIT ""
   STRUCT FIELD cmPago     INIT ""
   STRUCT FIELD cCtaPago   INIT ""
   STRUCT FIELD cLugarExp  INIT ""
   STRUCT FIELD cMoneda    INIT ""
   STRUCT FIELD cTCambio   INIT ""
   STRUCT FIELD nSubtot    INIT 00.00
   STRUCT FIELD nDescto    INIT 00.00
   STRUCT FIELD nTotal     INIT 00.00

   // "Emisor"
   STRUCT FIELD EcNomb     INIT ""
   STRUCT FIELD EcRFC      INIT ""

   STRUCT FIELD EcCalle    INIT ""
   STRUCT FIELD EcNoExt    INIT ""
   STRUCT FIELD EcNoInt    INIT ""
   STRUCT FIELD EcColonia  INIT ""
   STRUCT FIELD EcLocalid  INIT ""
   STRUCT FIELD EcMunicip  INIT ""
   STRUCT FIELD EcEstado   INIT ""
   STRUCT FIELD EcPais     INIT ""
   STRUCT FIELD EcCodPos   INIT ""

   STRUCT FIELD EcRegFisc  INIT ""
   STRUCT FIELD EcExpedEn  INIT ""


   // "Receptor"
   STRUCT FIELD RcNomb     INIT ""
   STRUCT FIELD RcRFC      INIT ""

   STRUCT FIELD RcCalle    INIT ""
   STRUCT FIELD RcNoExt    INIT ""
   STRUCT FIELD RcNoInt    INIT ""
   STRUCT FIELD RcColonia  INIT ""
   STRUCT FIELD RcLocalid  INIT ""
   STRUCT FIELD RcMunicip  INIT ""
   STRUCT FIELD RcEstado   INIT ""
   STRUCT FIELD RcPais     INIT ""
   STRUCT FIELD RcCodPos   INIT ""

   // "Conceptos"
   STRUCT FIELD nCantidad  INIT 00.00
   STRUCT FIELD cDescrip   INIT ""
   STRUCT FIELD cNoIdentif INIT ""
   STRUCT FIELD cUnidad    INIT ""
   STRUCT FIELD nPrecUnit  INIT 00.00
   STRUCT FIELD nImporte   INIT 00.00

   // "Impuestos"
   STRUCT FIELD nTImpRet   INIT 00.00
   STRUCT FIELD nIVA       INIT 00.00

   STRUCT FIELD cOrden     INIT ""
 END STRUCT

 oDato:Zap()

 oSay   := ARRAY(22)
 aDatos := {{ "","","","","" }}
 oBtn   := ARRAY(2)

 DEFINE FONT oFnt1 NAME "Arial" SIZE 0,-14 BOLD

 DEFINE DIALOG oDlg RESOURCE "VISOR_XML" TITLE "Visor XML" // ICON oICON // COLOR CLR_BLUE
  REDEFINE SAY oSay[01] PROMPT oDato:EcNomB    ID 101 OF oDlg COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[02] PROMPT oDato:EcRFC     ID 102 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[03] PROMPT cDirec1         ID 103 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[04] PROMPT oDato:EcExpedEn ID 104 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[05] PROMPT oDato:EcRegFisc ID 105 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[06] PROMPT oDato:cLugarExp ID 106 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[07] PROMPT oDato:cFecha    ID 109 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[08] PROMPT oDato:cSerie    ID 110 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[09] PROMPT oDato:cFolio    ID 111 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[10] PROMPT oDato:cFPago    ID 112 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[11] PROMPT oDato:cMPago    ID 113 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[12] PROMPT oDato:cCtaPago  ID 114 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE SAY oSay[13] PROMPT oDato:RcNomb    ID 115 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[14] PROMPT oDato:RcRFC     ID 116 OF oDlg // COLOR CLR_BLUE Font oFnt1
  REDEFINE SAY oSay[15] PROMPT cDirec2         ID 117 OF oDlg // COLOR CLR_BLUE Font oFnt1

  REDEFINE XBROWSE oBrw ID 120 OF oDlg ;
           HEADERS 'Cantidad','Descripci贸n','Unidad','P. Unitario','Importe' ;
           COLSIZES 60,260,85,85,85 ;
           PICTURES "999"           ,;
                    "@X"            ,;
                    "@X"            ,;
                    "999,999.99"      ,;
                    "999,999,999.99"   ;
           ARRAY aDatos FOOTERS AUTOCOLS

    WITH OBJECT oBrw
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW  //_HIGHLROWMS
      :nColDividerStyle := LINESTYLE_LIGHTGRAY
      :nRowDividerStyle := LINESTYLE_LIGHTGRAY

      :bClrSel      := { || { nRGB(  0,  0,255), aGradBarSel } }  // para barra de linea selecc cuando el control no tiene el foco
      :bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } }     // para barra de linea selecc cuando el control tiene el foco
      :lKinetic     := .F.
      :lContrastClr := .F.  //para que no cambie color de texto automaticamente segun intensidad del fondo

     * :SetArray(aDatos)

     * oBrw:Refresh()
    END

    REDEFINE SAY oSay[16] PROMPT oDato:cMoneda  ID 121 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[17] PROMPT oDato:cTCambio ID 122 OF oDlg                   // COLOR CLR_BLUE Font oFnt1
    REDEFINE SAY oSay[18] PROMPT oDato:nSubtot  ID 123 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nSubTotal
    REDEFINE SAY oSay[19] PROMPT oDato:nDescto  ID 124 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nDesCto
    REDEFINE SAY oSay[20] PROMPT oDato:nTImpRet ID 125 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTImpRet
    REDEFINE SAY oSay[21] PROMPT oDato:nIVA     ID 126 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nIVA
    REDEFINE SAY oSay[22] PROMPT oDato:nTotal   ID 127 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTotal

    REDEFINE BUTTON oBtn[01] ID 201 OF oDlg ACTION Sel_XML()
    REDEFINE BUTTON oBtn[02] ID 202 OF oDlg  // ACTION Pendiente opcion de impresion y/o PDF
 ACTIVATE DIALOG oDlg CENTER  //ON INIT Inicia()
RETURN NIL

//------------------------------------------------------------------------------
STATIC FUNCTION Sel_XML()
 LOCAL cFile
 Local hFile, oXmlDoc, oXmlIter, oTagActual, cTagname

 cFile := cGetFile32("*.xml","Por favor Seleccione archivo XML")

 if Empty( cFile )
     return nil
 endif

 if ! "." $ cFile
      cFile += ".xml"
 endif

 if ! File( cFile )
      MsgStop( "Archivo no encontrado " + cFile )

      return nil
 endif

 hFile    := FOpen( cFile )
 oXmlDoc  := TXmlDocument():New( hFile )
 oXmlIter := TXmlIterator():New( oXmlDoc:oRoot )

 oDato:Blank()

 aDatos := {}

 DO WHILE .T.
     oTagActual := oXmlIter:Next()

     If oTagActual != nil
         HEval( oTagActual:aAttributes, { | cKey, cValue | Guarda_XML_Valores( oDato, cKey, cValue, oTagActual:cName ) } )
     Else
         Exit
     Endif
 ENDDO

 FClose( hFile )

 cDirec1 := oDato:EcCalle+" "+oDato:EcNoExt+" "+oDato:EcColonia+" "+oDato:EcLocalid+" "+oDato:EcMunicip+" "+oDato:EcEstado+" "+oDato:EcPais+" "+oDato:EcCodPos
 cDirec2 := oDato:RcCalle+" "+oDato:RcNoExt+" "+oDato:RcColonia+" "+oDato:RcLocalid+" "+oDato:RcMunicip+" "+oDato:RcEstado+" "+oDato:RcPais+" "+oDato:RcCodPos

 AEval( oSay,{|o| o:Refresh()} )

 oBrw:SetArray(aDatos)
 oBrw:Refresh()
RETURN NIL

//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( oDatos, pcKey, pcValue, pcTagName )
 //? cTagName, cTagData, pcKey, pcValue
 //? pcTagName, pcKey, pcValue

      // "COMPROBANTE"
 IF      UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "VERSION";         oDatos:cVersion  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SERIE";           oDatos:cSerie    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FOLIO";           oDatos:cFolio    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FECHA";           oDatos:cFecha    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FORMADEPAGO";     oDatos:cfPago    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "METODODEPAGO";    oDatos:cmPago    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "NUMCTAPAGO";      oDatos:cCtaPago  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "LUGAREXPEDICION"; oDatos:cLugarExp := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TIPOCAMBIO";      oDatos:cTCambio  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "MONEDA";          oDatos:cMoneda   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SUBTOTAL";        oDatos:nSubtot   := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "DESCUENTO";       oDatos:nDesCto   := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TOTAL";           oDatos:nTotal    := VAL(pcValue)

      // "EMISOR"
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR"          .AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE";       oDatos:EcNomb    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR"          .AND. UPPER(ALLTRIM(pcKey)) = "RFC";          oDatos:EcRFC     := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE";        oDatos:EcCalle   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR";   oDatos:EcNoExt   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA";      oDatos:EcColonia := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD";    oDatos:EcLocalid := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO";    oDatos:EcMunicip := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";       oDatos:EcEstado  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";         oDatos:EcPais    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:EcCodPos  := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD"; oDatos:EcLocalid := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO"; oDatos:EcMunicip := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";    oDatos:EcEstado  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN"    .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";      oDatos:EcPais    := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:REGIMENFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "REGIMEN"; oDatos:EcRegFisc := pcValue

      // "RECEPTOR"
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR"  .AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE";       oDatos:RcNomb := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR"  .AND. UPPER(ALLTRIM(pcKey)) = "RFC";          oDatos:RcRFC  := pcValue

  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE";        oDatos:RcCalle   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR";   oDatos:RcNoExt   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOINTERIOR";   oDatos:RcNoInt   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA";      oDatos:RcColonia := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD";    oDatos:RcLocalid := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO";    oDatos:RcMunicip := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO";       oDatos:RcEstado  := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS";         oDatos:RcPais    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:RcCodPos  := pcValue

      // "Conceptos"  Para Browse
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "CANTIDAD";         oDatos:nCantidad  := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "DESCRIPCION";      oDatos:cDescrip   := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "NOIDENTIFICACION"; oDatos:cNoIdentif := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "UNIDAD";           oDatos:cUnidad    := pcValue
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "VALORUNITARIO";    oDatos:nPrecUnit  := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "IMPORTE";          oDatos:nImporte   := VAL(pcValue)

         // Carga aDatos en arreglo para TXBrowse \\
         AADD(aDatos, { oDatos:nCantidad ,;
                        oDatos:cDescrip  ,;
                        oDatos:cUnidad   ,;
                        oDatos:nPrecUnit ,;
                        oDatos:nImporte    })

      // "IMPUESTOS"
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSRETENIDOS";   oDatos:nTImpRet := VAL(pcValue)
  ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSTRASLADADOS"; oDatos:nIVA     := VAL(pcValue)
 ENDIF
RETURN(NIL)


Archivo .rc
Code (fw): Select all Collapse
// RESOURCE SCRIPT generated by "Pelles C for Windows, version 7.00".

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>

LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US

VISOR_XML DIALOGEX DISCARDABLE 6, 18, 574, 398
STYLE DS_SHELLFONT|WS_POPUP|DS_MODALFRAME|DS_CONTEXTHELP|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "Dialog"
FONT 8, "Tahoma", 0, 0, 1
{
  CONTROL "Datos Emisor y Receptor", 4001, "Button", BS_GROUPBOX, 0, 0, 592, 84
  CONTROL "", 4002, "Button", BS_GROUPBOX, 0, 84, 556, 180
  CONTROL "RFC:", 4003, "Static", WS_GROUP, 4, 16, 40, 8
  CONTROL "Direcci贸n:", 4004, "Static", WS_GROUP, 4, 24, 40, 8
  CONTROL "Expedido en:", 4005, "Static", WS_GROUP, 4, 36, 44, 8
  CONTROL "Regimen Fiscal:", 4006, "Static", WS_GROUP, 4, 48, 52, 8
  CONTROL "Lugar de Expedicion:", 4007, "Static", WS_GROUP, 4, 60, 68, 8
  CONTROL "Telefono:", 4008, "Static", WS_GROUP, 4, 72, 40, 8
  CONTROL "Correo:", 4009, "Static", WS_GROUP, 128, 72, 40, 8
  CONTROL "Fecha:", 4010, "Static", WS_GROUP, 344, 8, 40, 8
  CONTROL "Serie:", 4011, "Static", WS_GROUP, 344, 20, 40, 8
  CONTROL "Folio:", 4012, "Static", WS_GROUP, 348, 36, 40, 8
  CONTROL "Forma de Pago:", 4013, "Static", WS_GROUP, 348, 48, 52, 8
  CONTROL "Metodo de Pago:", 4014, "Static", WS_GROUP, 348, 56, 56, 8
  CONTROL "No. de Cuenta:", 4015, "Static", WS_GROUP, 348, 68, 52, 8
  CONTROL "101", 101, "Static", WS_GROUP, 84, 4, 256, 8
  CONTROL "102", 102, "Static", WS_GROUP, 40, 16, 184, 8
  CONTROL "103", 103, "Static", WS_GROUP, 44, 24, 296, 8
  CONTROL "104", 104, "Static", WS_GROUP, 48, 36, 184, 8
  CONTROL "105", 105, "Static", WS_GROUP, 60, 48, 176, 8
  CONTROL "106", 106, "Static", WS_GROUP, 72, 60, 164, 8
  CONTROL "107", 107, "Static", WS_GROUP, 36, 72, 40, 8
  CONTROL "108", 108, "Static", WS_GROUP, 156, 72, 40, 8
  CONTROL "109", 109, "Static", WS_GROUP, 388, 8, 188, 8
  CONTROL "110", 110, "Static", WS_GROUP, 388, 20, 40, 8
  CONTROL "111", 111, "Static", WS_GROUP, 396, 36, 40, 8
  CONTROL "112", 112, "Static", WS_GROUP, 404, 48, 156, 8
  CONTROL "113", 113, "Static", WS_GROUP, 404, 56, 156, 8
  CONTROL "114", 114, "Static", WS_GROUP, 400, 68, 96, 8
  CONTROL "120", 120, "TXBrowse", WS_TABSTOP|0x00a00000, 4, 188, 422, 72
  CONTROL "", 4016, "Button", BS_GROUPBOX, 4, 260, 524, 72
  CONTROL "Moneda:", 4017, "Static", WS_GROUP, 8, 272, 40, 8
  CONTROL "Tipo de Cambio:", 4018, "Static", WS_GROUP, 8, 288, 40, 8
  CONTROL "SubTotal:", 4019, "Static", WS_GROUP, 312, 272, 40, 8
  CONTROL "Descto:", 4020, "Static", WS_GROUP, 312, 284, 40, 8
  CONTROL "Impto Retenido:", 4021, "Static", WS_GROUP, 312, 296, 56, 8
  CONTROL "I.V.A.:", 4022, "Static", WS_GROUP, 312, 308, 40, 8
  CONTROL "Total:", 4023, "Static", WS_GROUP, 312, 320, 40, 8
  CONTROL "121", 121, "Static", WS_GROUP, 48, 272, 40, 8
  CONTROL "122", 122, "Static", WS_GROUP, 48, 288, 40, 8
  CONTROL "123", 123, "Static", SS_RIGHT|WS_GROUP, 368, 272, 40, 8
  CONTROL "124", 124, "Static", SS_RIGHT|WS_GROUP, 368, 284, 40, 8
  CONTROL "125", 125, "Static", SS_RIGHT|WS_GROUP, 368, 296, 40, 8
  CONTROL "126", 126, "Static", SS_RIGHT|WS_GROUP, 368, 308, 40, 8
  CONTROL "127", 127, "Static", SS_RIGHT|WS_GROUP, 368, 320, 40, 8
  CONTROL "Cliente:", 4024, "Static", WS_GROUP, 4, 92, 40, 8
  CONTROL "R.F.C.:", 4025, "Static", WS_GROUP, 4, 108, 40, 8
  CONTROL "Direcci贸n:", 4026, "Static", WS_GROUP, 4, 124, 40, 8
  CONTROL "115", 115, "Static", WS_GROUP, 40, 92, 272, 8
  CONTROL "116", 116, "Static", WS_GROUP, 40, 108, 64, 8
  CONTROL "117", 117, "Static", WS_GROUP, 40, 124, 396, 8
  CONTROL "XML", 201, "Button", WS_TABSTOP, 40, 356, 50, 14
  CONTROL "Imprimir", 202, "Button", WS_TABSTOP, 104, 356, 50, 14
}


Saludos y buen dia.

Atte: Adrian C. C.
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Re: Visor o leer XML...(Solucionado)
Posted: Wed Aug 20, 2014 10:11 PM

Adrian, si tienes un correo al que te lo pueda enviar, te envio con todo y ejemplos...

Saludos

Luis Fernando Rubio Rubio
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Re: Visor o leer XML...(Solucionado)
Posted: Wed Aug 20, 2014 11:08 PM
Hola, ya subi a mi pagina la TArray que utilizo con todo y ejemplos y todo

La direccion es: http://www.csoluciones.com.mx/fivewin/

Espero les sea de utilidad...

Saludos
Luis Fernando Rubio Rubio
Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Visor o leer XML...(Solucionado)
Posted: Wed Aug 20, 2014 11:37 PM
derpipu wrote:Hola, ya subi a mi pagina la TArray que utilizo con todo y ejemplos y todo

La direccion es: http://www.csoluciones.com.mx/fivewin/

Espero les sea de utilidad...

Saludos



Hola Ing, Luis Fernando, gracias muy amable por los ejemplos, yo aqui sigo con la rutina de xml, que me tope con un detalle, que no me habia fijado, cuando son archivos cfd, no me los lee, solo archivos de CFDI: y por lo tanto, tuve que hacer modificaciones a la rutina y al parecer ya ahora, si me lee, dos tipos de cfds, CFD version 1,2 y CFDi version 3.20

Si es comprobante que me lea, sino de otra manera si es CFDI:Comprobante, al igual que me los lea.

Copio la rutina,que tuve que modificar y gracias de nuevo Ing. Luis Fernando.

Ahora lo que se me presenta una duda, como saber en la misma rutina que al leer los datos, detecte el CFD fue alterado. Verifica tus datos..! se podra saber ? :-) :-)

Si alguien la puede mejorar, esta rutina, sera bienvenida

Code (fw): Select all Collapse
//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( oDatos, pcKey, pcValue, pcTagName )
聽Local lAlterado := .T., lProcesa := .F.
聽LOCAL aVar

聽//? cTagName, cTagData, pcKey, pcValue
聽//? pcTagName, pcKey, pcValue

聽pcTagName := UPPER(ALLTRIM(pcTagName))
聽pcKey 聽 聽 := UPPER(ALLTRIM(pcKey))

聽 聽 聽 // "COMPROBANTE"
聽IF 聽 聽 聽pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "VERSION"; 聽 聽 聽 聽 oDatos:cVersion 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "SERIE"; 聽 聽 聽 聽 聽 oDatos:cSerie 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "FOLIO"; 聽 聽 聽 聽 聽 oDatos:cFolio 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "FECHA"; 聽 聽 聽 聽 聽 oDatos:cFecha 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "FORMADEPAGO"; 聽 聽 oDatos:cfPago 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "METODODEPAGO"; 聽 聽oDatos:cmPago 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "NUMCTAPAGO"; 聽 聽 聽oDatos:cCtaPago 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "LUGAREXPEDICION"; oDatos:cLugarExp := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "TIPOCAMBIO"; 聽 聽 聽oDatos:cTCambio 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "MONEDA"; 聽 聽 聽 聽 聽oDatos:cMoneda 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "SUBTOTAL"; 聽 聽 聽 聽oDatos:nSubtot 聽 := VAL(pcValue)
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "DESCUENTO"; 聽 聽 聽 oDatos:nDesCto 聽 := VAL(pcValue)
聽 ELSEIF pcTagName = IF(pcTagName="COMPROBANTE","COMPROBANTE","CFDI:COMPROBANTE") .AND. pcKey = "TOTAL"; 聽 聽 聽 聽 聽 oDatos:nTotal 聽 聽:= VAL(pcValue)

聽 聽 聽 // "EMISOR"
聽 ELSEIF pcTagName = IF(pcTagName="EMISOR","EMISOR","CFDI:EMISOR") .AND. pcKey = "NOMBRE"; oDatos:EcNomb := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="EMISOR","EMISOR","CFDI:EMISOR") .AND. pcKey = "RFC"; 聽 聽oDatos:EcRFC 聽:= pcValue

聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "CALLE"; 聽 聽 聽 聽oDatos:EcCalle 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "NOEXTERIOR"; 聽 oDatos:EcNoExt 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "NOINTERIOR"; 聽 oDatos:EcNoInt 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "COLONIA"; 聽 聽 聽oDatos:EcColonia := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "LOCALIDAD"; 聽 聽oDatos:EcLocalid := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "MUNICIPIO"; 聽 聽oDatos:EcMunicip := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "ESTADO"; 聽 聽 聽 oDatos:EcEstado 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "PAIS"; 聽 聽 聽 聽 oDatos:EcPais 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIOFISCAL","DOMICILIOFISCAL","CFDI:DOMICILIOFISCAL") .AND. pcKey = "CODIGOPOSTAL"; oDatos:EcCodPos 聽:= pcValue

聽 ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "CALLE"; 聽 聽 聽oDatos:EcCalle1 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "NOEXTERIOR"; oDatos:EcNoExt1 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "LOCALIDAD"; 聽oDatos:EcLocalid1 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "MUNICIPIO"; 聽oDatos:EcMunicip1 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "ESTADO"; 聽 聽 oDatos:EcEstado1 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="EXPEDIDOEN","EXPEDIDOEN","CFDI:EXPEDIDOEN") .AND. pcKey = "PAIS"; 聽 聽 聽 oDatos:EcPais1 聽 聽:= pcValue

聽 ELSEIF pcTagName = IF(pcTagName="REGIMENFISCAL","REGIMENFISCAL","CFDI:REGIMENFISCAL") .AND. pcKey = "REGIMEN"; oDatos:EcRegFisc := pcValue

聽 聽 聽 // "RECEPTOR"
聽 ELSEIF pcTagName = IF(pcTagName="RECEPTOR","RECEPTOR","CFDI:RECEPTOR") .AND. pcKey = "NOMBRE"; 聽 聽 聽 oDatos:RcNomb := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="RECEPTOR","RECEPTOR","CFDI:RECEPTOR") .AND. pcKey = "RFC"; 聽 聽 聽 聽 聽oDatos:RcRFC 聽:= pcValue

聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "CALLE"; 聽 聽 聽 聽oDatos:RcCalle 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "NOEXTERIOR"; 聽 oDatos:RcNoExt 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "NOINTERIOR"; 聽 oDatos:RcNoInt 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "COLONIA"; 聽 聽 聽oDatos:RcColonia := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "LOCALIDAD"; 聽 聽oDatos:RcLocalid := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "MUNICIPIO"; 聽 聽oDatos:RcMunicip := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "ESTADO"; 聽 聽 聽 oDatos:RcEstado 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "PAIS"; 聽 聽 聽 聽 oDatos:RcPais 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="DOMICILIO","DOMICILIO","CFDI:DOMICILIO") .AND. pcKey = "CODIGOPOSTAL"; oDatos:RcCodPos 聽:= pcValue

聽 聽 聽 // "CONCEPTO" 聽Para Browse
聽 ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "CANTIDAD"; 聽 聽 聽 聽 oDatos:nCantidad 聽:= VAL(pcValue)
聽 ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "DESCRIPCION"; 聽 聽 聽oDatos:cDescrip 聽 := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "NOIDENTIFICACION"; oDatos:cNoIdentif := pcValue
聽 ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "UNIDAD"; 聽 聽 聽 聽 聽 oDatos:cUnidad 聽 聽:= pcValue
聽 ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "VALORUNITARIO"; 聽 聽oDatos:nPrecUnit 聽:= VAL(pcValue)
聽 ELSEIF pcTagName = IF(pcTagName="CONCEPTO","CONCEPTO","CFDI:CONCEPTO") .AND. pcKey = "IMPORTE"; 聽 聽 聽 聽 聽oDatos:nImporte 聽 := VAL(pcValue)

聽 聽 聽 聽 聽// Carga aDatos en arreglo para TXBrowse \\
聽 聽 聽 聽 聽AADD(aDatos, { oDatos:nCantidad ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDatos:cDescrip 聽,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDatos:cUnidad 聽 ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDatos:nPrecUnit ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDatos:nImporte 聽 聽})

聽 聽 聽 // "IMPUESTOS"
聽 ELSEIF UPPER(ALLTRIM(pcTagName))=IF(pcTagName="IMPUESTOS","IMPUESTOS","CFDI:IMPUESTOS") .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSRETENIDOS"; 聽 oDatos:nTImpRet := VAL(pcValue)
聽 ELSEIF UPPER(ALLTRIM(pcTagName))=IF(pcTagName="IMPUESTOS","IMPUESTOS","CFDI:IMPUESTOS") .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSTRASLADADOS"; oDatos:nIVA 聽 聽 := VAL(pcValue)
聽ENDIF
RETURN(NIL)


Si alguien la puede mejorar, esta rutina, sera bienvenida

Saludos y buen dia Ing. Luis Fernando.

Atte: Adrian C. C.
Posts: 196
Joined: Fri May 15, 2009 01:25 AM
Re: Visor o leer XML...(Solucionado)
Posted: Wed Apr 25, 2018 07:24 PM
Adrian

Desarrolle tu ejemplo, te pongo la imagen

Este es el link de la imagen

https://1drv.ms/u/s!AgM94kAKnz9CjnsbZvIMAF9cp9CA

En el browse que contiene dos partidas, los datos de unidad y precio unitario de la primera partida me los ponde en la segunda

Este es mi codigo
Code (fw): Select all Collapse
#include "fivewin.ch"
#include "tarray.ch"

Static oDlg, oSay, oBrw, oDato, aDatos, oFnt1, oBtn
Static cDirec1, cDirec2

//------------------------------------------------------------------------------
FUNCTION main()
聽 聽Local aGradBarSelFocus:= {{ 1, RGB(252,232,171) , RGB(248,195, 34) }}
聽 聽Local aGradBarSel 聽 聽 := {{ 1, RGB(252,235, 184), RGB(251,222,88) }}

聽 聽SET EXCLUSIVE OFF
聽 聽SET 3DLOOK ON
聽 聽SET DELETED ON
聽 聽SET CONFIRM ON
聽 聽SET EPOCH TO 1969
聽 聽SET DATE BRITISH

聽 聽SetResDebug(.T.) // Al inicio ...

聽 聽oDato := NIL

聽 聽DEFINE STRUCT oDato
聽 聽 聽 // "Comprobante"
聽 聽 聽 STRUCT FIELD cVersion 聽 INIT ""
聽 聽 聽 STRUCT FIELD cSerie 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD cFolio 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD cFecha 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD cfPago 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD cmPago 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD cCtaPago 聽 INIT ""
聽 聽 聽 STRUCT FIELD cLugarExp 聽INIT ""
聽 聽 聽 STRUCT FIELD cMoneda 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD cTCambio 聽 INIT ""
聽 聽 聽 STRUCT FIELD nSubtot 聽 聽INIT 00.00
聽 聽 聽 STRUCT FIELD nDescto 聽 聽INIT 00.00
聽 聽 聽 STRUCT FIELD nTotal 聽 聽 INIT 00.00

聽 聽 聽 // "Emisor"
聽 聽 聽 STRUCT FIELD EcNomb 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD EcRFC 聽 聽 聽INIT ""

聽 聽 聽 STRUCT FIELD EcCalle 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD EcNoExt 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD EcNoInt 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD EcColonia 聽INIT ""
聽 聽 聽 STRUCT FIELD EcLocalid 聽INIT ""
聽 聽 聽 STRUCT FIELD EcMunicip 聽INIT ""
聽 聽 聽 STRUCT FIELD EcEstado 聽 INIT ""
聽 聽 聽 STRUCT FIELD EcPais 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD EcCodPos 聽 INIT ""

聽 聽 聽 STRUCT FIELD EcRegFisc 聽INIT ""
聽 聽 聽 STRUCT FIELD EcExpedEn 聽INIT ""


聽 聽 聽 // "Receptor"
聽 聽 聽 STRUCT FIELD RcNomb 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD RcRFC 聽 聽 聽INIT ""

聽 聽 聽 STRUCT FIELD RcCalle 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD RcNoExt 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD RcNoInt 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD RcColonia 聽INIT ""
聽 聽 聽 STRUCT FIELD RcLocalid 聽INIT ""
聽 聽 聽 STRUCT FIELD RcMunicip 聽INIT ""
聽 聽 聽 STRUCT FIELD RcEstado 聽 INIT ""
聽 聽 聽 STRUCT FIELD RcPais 聽 聽 INIT ""
聽 聽 聽 STRUCT FIELD RcCodPos 聽 INIT ""

聽 聽 聽 // "Conceptos"
聽 聽 聽 STRUCT FIELD nCantidad 聽INIT 00.00
聽 聽 聽 STRUCT FIELD cDescrip 聽 INIT ""
聽 聽 聽 STRUCT FIELD cNoIdentif INIT ""
聽 聽 聽 STRUCT FIELD cUnidad 聽 聽INIT ""
聽 聽 聽 STRUCT FIELD nPrecUnit 聽INIT 00.00
聽 聽 聽 STRUCT FIELD nImporte 聽 INIT 00.00

聽 聽 聽 // "Impuestos"
聽 聽 聽 STRUCT FIELD nTImpRet 聽 INIT 00.00
聽 聽 聽 STRUCT FIELD nIVA 聽 聽 聽 INIT 00.00

聽 聽 聽 STRUCT FIELD cOrden 聽 聽 INIT ""
聽 聽END STRUCT

聽 聽oDato:Zap()

聽 聽oSay 聽 := ARRAY(22)
聽 聽aDatos := {{ "","","","","" }}
聽 聽oBtn 聽 := ARRAY(2)

聽 聽DEFINE FONT oFnt1 NAME "Arial" SIZE 0,-14 BOLD

聽 聽DEFINE DIALOG oDlg RESOURCE "DLG_VISOR_XML" TITLE "Visor XML" // ICON oICON // COLOR CLR_BLUE

聽 聽REDEFINE SAY oSay[01] PROMPT oDato:EcNomB 聽 聽ID 101 OF oDlg COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[02] PROMPT oDato:EcRFC 聽 聽 ID 102 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[03] PROMPT cDirec1 聽 聽 聽 聽 ID 103 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[04] PROMPT oDato:EcExpedEn ID 104 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[05] PROMPT oDato:EcRegFisc ID 105 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[06] PROMPT oDato:cLugarExp ID 106 OF oDlg // COLOR CLR_BLUE Font oFnt1

聽 聽REDEFINE SAY oSay[07] PROMPT oDato:cFecha 聽 聽ID 109 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[08] PROMPT oDato:cSerie 聽 聽ID 110 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[09] PROMPT oDato:cFolio 聽 聽ID 111 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[10] PROMPT oDato:cFPago 聽 聽ID 112 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[11] PROMPT oDato:cMPago 聽 聽ID 113 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[12] PROMPT oDato:cCtaPago 聽ID 114 OF oDlg // COLOR CLR_BLUE Font oFnt1

聽 聽REDEFINE SAY oSay[13] PROMPT oDato:RcNomb 聽 聽ID 115 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[14] PROMPT oDato:RcRFC 聽 聽 ID 116 OF oDlg // COLOR CLR_BLUE Font oFnt1
聽 聽REDEFINE SAY oSay[15] PROMPT cDirec2 聽 聽 聽 聽 ID 117 OF oDlg // COLOR CLR_BLUE Font oFnt1

聽 聽REDEFINE XBROWSE oBrw ID 120 OF oDlg ;
聽 聽 聽 聽 聽 聽 HEADERS 'Cantidad','Descripci贸n','Unidad','P. Unitario','Importe' ;
聽 聽 聽 聽 聽 聽 COLSIZES 60,260,85,85,85 ;
聽 聽 聽 聽 聽 聽 PICTURES "999" 聽 聽 聽 聽 聽 ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"@X" 聽 聽 聽 聽 聽 聽,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"@X" 聽 聽 聽 聽 聽 聽,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"999,999.99" 聽 聽 聽,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"999,999,999.99" 聽 ;
聽 聽 聽 聽 聽 聽 ARRAY aDatos FOOTERS AUTOCOLS

聽 聽 聽 WITH OBJECT oBrw
聽 聽 聽 聽 聽:nMarqueeStyle 聽 聽:= MARQSTYLE_HIGHLROW 聽//_HIGHLROWMS
聽 聽 聽 聽 聽:nColDividerStyle := LINESTYLE_LIGHTGRAY
聽 聽 聽 聽 聽:nRowDividerStyle := LINESTYLE_LIGHTGRAY

聽 聽 聽 聽 聽:bClrSel 聽 聽 聽:= { || { nRGB( 聽0, 聽0,255), aGradBarSel } } 聽// para barra de linea selecc cuando el control no tiene el foco
聽 聽 聽 聽 聽:bClrSelFocus := { || { CLR_BLACK, aGradBarSelFocus } } 聽 聽 // para barra de linea selecc cuando el control tiene el foco
聽 聽 聽 聽 聽:lKinetic 聽 聽 := .F.
聽 聽 聽 聽 聽:lContrastClr := .F. 聽//para que no cambie color de texto automaticamente segun intensidad del fondo

聽 聽 聽 聽 聽:SetArray(oDato:aDatos)

聽 聽 聽 聽 聽//:Refresh()
聽 聽 聽 END

聽 聽 聽 REDEFINE SAY oSay[16] PROMPT oDato:cMoneda 聽ID 121 OF oDlg 聽 聽 聽 聽 聽 聽 聽 聽 聽 // COLOR CLR_BLUE Font oFnt1
聽 聽 聽 REDEFINE SAY oSay[17] PROMPT oDato:cTCambio ID 122 OF oDlg 聽 聽 聽 聽 聽 聽 聽 聽 聽 // COLOR CLR_BLUE Font oFnt1
聽 聽 聽 REDEFINE SAY oSay[18] PROMPT oDato:nSubtot 聽ID 123 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nSubTotal
聽 聽 聽 REDEFINE SAY oSay[19] PROMPT oDato:nDescto 聽ID 124 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nDesCto
聽 聽 聽 REDEFINE SAY oSay[20] PROMPT oDato:nTImpRet ID 125 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTImpRet
聽 聽 聽 REDEFINE SAY oSay[21] PROMPT oDato:nIVA 聽 聽 ID 126 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nIVA
聽 聽 聽 REDEFINE SAY oSay[22] PROMPT oDato:nTotal 聽 ID 127 OF oDlg pict "999,999.99" // COLOR CLR_BLUE Font oFnt1 // nTotal

聽 聽 聽 REDEFINE BUTTON oBtn[01] ID 201 OF oDlg ACTION Sel_XML()
聽 聽 聽 REDEFINE BUTTON oBtn[02] ID 202 OF oDlg 聽// ACTION Pendiente opcion de impresion y/o PDF

聽 聽ACTIVATE DIALOG oDlg CENTER 聽//ON INIT Inicia()

RETURN NIL

//------------------------------------------------------------------------------
STATIC FUNCTION Sel_XML()
聽 聽LOCAL cFile
聽 聽Local hFile, oXmlDoc, oXmlIter, oTagActual, cTagname

聽 聽cFile := cGetFile32("*.xml","Por favor Seleccione archivo XML")

聽 聽if Empty( cFile )
聽 聽 聽 return nil
聽 聽endif

聽 聽if ! "." $ cFile
聽 聽 聽 cFile += ".xml"
聽 聽endif

聽 聽if ! File( cFile )
聽 聽 聽 MsgStop( "Archivo no encontrado " + cFile )
聽 聽 聽 return nil
聽 聽endif

聽 聽hFile 聽 聽:= FOpen( cFile )
聽 聽oXmlDoc 聽:= TXmlDocument():New( hFile )
聽 聽oXmlIter := TXmlIterator():New( oXmlDoc:oRoot )

聽 聽oDato:Blank()

聽 聽aDatos := {}

聽 聽DO WHILE .T.

聽 聽 聽 oTagActual := oXmlIter:Next()

聽 聽 聽 If oTagActual != nil
聽 聽 聽 聽 聽HEval( oTagActual:aAttributes, { | cKey, cValue | Guarda_XML_Valores( oDato, cKey, cValue, oTagActual:cName ) } )
聽 聽 聽 Else
聽 聽 聽 聽 聽Exit
聽 聽 聽 Endif
聽 聽ENDDO

聽 聽FClose( hFile )

聽 聽cDirec1 := oDato:EcCalle+" "+oDato:EcNoExt+" "+oDato:EcColonia+" "+oDato:EcLocalid+" "+oDato:EcMunicip+" "+oDato:EcEstado+" "+oDato:EcPais+" "+oDato:EcCodPos
聽 聽cDirec2 := oDato:RcCalle+" "+oDato:RcNoExt+" "+oDato:RcColonia+" "+oDato:RcLocalid+" "+oDato:RcMunicip+" "+oDato:RcEstado+" "+oDato:RcPais+" "+oDato:RcCodPos

聽 聽AEval( oSay,{|o| o:Refresh()} )

聽 聽oBrw:SetArray(aDatos)
聽 聽oBrw:Refresh()

RETURN NIL

//------------------------------------------------------------------------------
FUNCTION Guarda_XML_Valores( oDatos, pcKey, pcValue, pcTagName )
聽 聽//? oDatos, pcKey, pcValue, pcTagName


聽 聽// "COMPROBANTE"
聽 聽IF 聽 聽 聽 聽UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "VERSION"; 聽 聽 聽 聽 oDatos:cVersion 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SERIE"; 聽 聽 聽 聽 聽 oDatos:cSerie 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FOLIO"; 聽 聽 聽 聽 聽 oDatos:cFolio 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FECHA"; 聽 聽 聽 聽 聽 oDatos:cFecha 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "FORMADEPAGO"; 聽 聽 oDatos:cfPago 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "METODODEPAGO"; 聽 聽oDatos:cmPago 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "NUMCTAPAGO"; 聽 聽 聽oDatos:cCtaPago 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "LUGAREXPEDICION"; oDatos:cLugarExp := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TIPOCAMBIO"; 聽 聽 聽oDatos:cTCambio 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "MONEDA"; 聽 聽 聽 聽 聽oDatos:cMoneda 聽 := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "SUBTOTAL"; 聽 聽 聽 聽oDatos:nSubtot 聽 := VAL(pcValue)
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "DESCUENTO"; 聽 聽 聽 oDatos:nDesCto 聽 := VAL(pcValue)
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:COMPROBANTE" .AND. UPPER(ALLTRIM(pcKey)) = "TOTAL"; 聽 聽 聽 聽 聽 oDatos:nTotal 聽 聽:= VAL(pcValue)

聽 聽 聽 // "EMISOR"
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR" 聽 聽 聽 聽 聽.AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE"; 聽 聽 聽 oDatos:EcNomb 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EMISOR" 聽 聽 聽 聽 聽.AND. UPPER(ALLTRIM(pcKey)) = "RFC"; 聽 聽 聽 聽 聽oDatos:EcRFC 聽 聽 := pcValue

聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE"; 聽 聽 聽 聽oDatos:EcCalle 聽 := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR"; 聽 oDatos:EcNoExt 聽 := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA"; 聽 聽 聽oDatos:EcColonia := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD"; 聽 聽oDatos:EcLocalid := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO"; 聽 聽oDatos:EcMunicip := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO"; 聽 聽 聽 oDatos:EcEstado 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS"; 聽 聽 聽 聽 oDatos:EcPais 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIOFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:EcCodPos 聽:= pcValue

聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN" 聽 聽.AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD"; oDatos:EcLocalid := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN" 聽 聽.AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO"; oDatos:EcMunicip := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN" 聽 聽.AND. UPPER(ALLTRIM(pcKey)) = "ESTADO"; 聽 聽oDatos:EcEstado 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:EXPEDIDOEN" 聽 聽.AND. UPPER(ALLTRIM(pcKey)) = "PAIS"; 聽 聽 聽oDatos:EcPais 聽 聽:= pcValue

聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:REGIMENFISCAL" .AND. UPPER(ALLTRIM(pcKey)) = "REGIMEN"; oDatos:EcRegFisc := pcValue

聽 聽 聽 // "RECEPTOR"
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR" 聽.AND. UPPER(ALLTRIM(pcKey)) = "NOMBRE"; 聽 聽 聽 oDatos:RcNomb := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:RECEPTOR" 聽.AND. UPPER(ALLTRIM(pcKey)) = "RFC"; 聽 聽 聽 聽 聽oDatos:RcRFC 聽:= pcValue

聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CALLE"; 聽 聽 聽 聽oDatos:RcCalle 聽 := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOEXTERIOR"; 聽 oDatos:RcNoExt 聽 := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "NOINTERIOR"; 聽 oDatos:RcNoInt 聽 := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "COLONIA"; 聽 聽 聽oDatos:RcColonia := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "LOCALIDAD"; 聽 聽oDatos:RcLocalid := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "MUNICIPIO"; 聽 聽oDatos:RcMunicip := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "ESTADO"; 聽 聽 聽 oDatos:RcEstado 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "PAIS"; 聽 聽 聽 聽 oDatos:RcPais 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:DOMICILIO" .AND. UPPER(ALLTRIM(pcKey)) = "CODIGOPOSTAL"; oDatos:RcCodPos 聽:= pcValue

聽 聽 聽 // "Conceptos" 聽Para Browse
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "CANTIDAD"; 聽 聽 聽 聽 oDatos:nCantidad 聽:= VAL(pcValue)
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "DESCRIPCION"; 聽 聽 聽oDatos:cDescrip 聽 := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "NOIDENTIFICACION"; oDatos:cNoIdentif := pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "UNIDAD"; 聽 聽 聽 聽 聽 oDatos:cUnidad 聽 聽:= pcValue
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "VALORUNITARIO"; 聽 聽oDatos:nPrecUnit 聽:= VAL(pcValue)
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:CONCEPTO" .AND. UPPER(ALLTRIM(pcKey)) = "IMPORTE"; 聽 聽 聽 聽 聽oDatos:nImporte 聽 := VAL(pcValue)

聽 聽 聽 // Carga aDatos en arreglo para TXBrowse \\
聽 聽 聽 AADD(aDatos, { oDatos:nCantidad ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oDatos:cDescrip 聽,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oDatos:cUnidad 聽 ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oDatos:nPrecUnit ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oDatos:nImporte } )

聽 聽 聽 // "IMPUESTOS"
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSRETENIDOS"; 聽 oDatos:nTImpRet := VAL(pcValue)
聽 聽 聽 ELSEIF UPPER(ALLTRIM(pcTagName)) = "CFDI:IMPUESTOS" .AND. UPPER(ALLTRIM(pcKey)) = "TOTALIMPUESTOSTRASLADADOS"; oDatos:nIVA 聽 聽 := VAL(pcValue)

聽 聽ENDIF

RETURN(NIL)

//------------------------------------------------------------------------------

// FIN DE : MAIN.PRG


De antemano muchas gracias por tu ayuda

Saludos
Juan Arroyo
M茅xico
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
Posts: 1710
Joined: Tue Oct 28, 2008 06:26 PM
Re: Visor o leer XML...(Solucionado)
Posted: Thu Apr 26, 2018 12:58 PM

Esitmado Derpipu

No funciona el Link de descarga.

Saludos,



Adhemar C.