Visor o leer XML...(Solucionado)

User avatar
juan_arroyo_t
Posts: 196
Joined: Fri May 15, 2009 1:25 am
Location: Cuautitlán, Mexico

Re: Visor o leer XML...(Solucionado)

Post by juan_arroyo_t »

Adrian

Logre corregir el error en el visor de xml
link de la imagen del visor : https://1drv.ms/u/s!AgM94kAKnz9CjnwwJ3NF40Y4o3rH
link del archivo xml : https://1drv.ms/u/s!AgM94kAKnz9Cjn1aVU1jCEckyNMs

Cambios en el codigo :

Code: Select all

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
         // ---------------------------------------------------------------------------------------
         //Nueva Linea
         oDato:nImporte := 0
         // --------------------------------------------------------------------------------------
         HEval( oTagActual:aAttributes, { | cKey, cValue | Guarda_XML_Valores( oDato, cKey, cValue, oTagActual:cName ) } )
        // ------------------------------------------------------------------------
         Agregue estas lineas
         IF oDato:nImporte > 0
            AADD(aDatos, { oDato:nCantidad ,;
                           oDato:cDescrip  ,;
                           oDato:cUnidad   ,;
                           oDato:nPrecUnit ,;
                           oDato:nImporte } )
         // ------------------------------------------------------------------------------
         ENDIF
      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[/quote]

En la rutina del post anterior :
[code=fw]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)
     // ----------------------------------------------------------------------------------------
      /* Lineas eliminadas*/
      //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)
 
Saludos
Juan Arroyo
México
FWH 7.12 VERCE 5.3 xHarbour 1.1.0
juan_arroyo_t@hotmail.com
Post Reply