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 Expand view
- 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