Page 1 of 1

Leer un archivo xml

Posted: Mon Aug 27, 2018 4:08 pm
by horacio
Amigos, estoy tratando de leer un archivo xml pero tengo ciertas dificultades, tomé como punto de partida xmltree que lo lee perfectamente pero no necesito presentarlo como un árbol sino sacar ciertos datos de este archivo. Se me ocurrió poner los datos en un array pero no me lee todos los datos.

Este es un fragmento del xml

Code: Select all

        <deduccion tipo="7">
            <tipoDoc>80</tipoDoc>
            <nroDoc>30695303978</nroDoc>
            <denominacion>SUPER NUEVA COLON SRL</denominacion>
            <descBasica>30695303978 - SUPER NUEVA COLON SRL</descBasica>
            <montoTotal>769.80</montoTotal>
            <periodos>
                <periodo mesDesde="2" mesHasta="2" montoMensual="52.17"/>
                <periodo mesDesde="3" mesHasta="3" montoMensual="171.34"/>
                <periodo mesDesde="4" mesHasta="4" montoMensual="96.16"/>
                <periodo mesDesde="5" mesHasta="5" montoMensual="82.02"/>
                <periodo mesDesde="6" mesHasta="6" montoMensual="368.11"/>
            </periodos>
        </deduccion>
 
y esto es lo que obtengo en el array

Code: Select all

deduccion   
tipoDoc 80
nroDoc  30695303978
denominacion    SUPER NUEVA COLON SRL
descBasica  30695303978 - SUPER NUEVA COLON SRL
montoTotal  769.80
periodos    
periodo 
periodo 
periodo 
periodo 
periodo 
 
Este es el código de xmltree que modifiqué para que obtener un array

Code: Select all

   While( ( oTagActual := oXmlIter : Next() ) != nil )
      If( oTagLast != nil )
         If( oTagLast : Depth() < oTagActual : Depth() )
            ASize( aRoots, Len( aRoots ) + 1 )
            aRoots[ oTagActual : Depth() + 1 ] := aRoots[ oTagActual : Depth() ] : Add( oTagActual : cName )
            aRoots[ oTagActual : Depth() + 1 ] : Cargo := oTagActual
            Aadd( aDatos, { oTagActual : cName, oTagActual : cData } ) <- ARRAY
         End
         If( oTagLast : Depth() > oTagActual : Depth() )
            aRoots[ oTagActual : depth() + 1 ] := aRoots[ oTagActual : Depth() ] : Add( oTagActual : cName )
            aRoots[ oTagActual : depth() + 1 ] : Cargo := oTagActual
            Aadd( aDatos, { oTagActual : cName, oTagActual : cData } ) <- ARRAY
         End
         If( oTagLast : Depth() == oTagActual : Depth() )
            aRoots[ Max( oTagLast : Depth(), 1 ) ] : Add( oTagActual : cName ) : Cargo = oTagActual 
            Aadd( aDatos, { oTagActual : cName, oTagActual : cData } ) <- ARRAY
            End
      Else
         AAdd( aRoots, oTree : Add( oTagActual : cName ) )
         ATail( aRoots ) : Cargo = oTagActual
         Aadd( aDatos, { oTagActual : cName, oTagActual : cData } ) <- ARRAY
      End
      oTagLast := oTagActual
   Enddo
   xBrowser aDatos
    FClose( hFile )
   oTree : bChanged = { | oItem | oLbxDatas : SetItems( { oItem : GetSelected() : Cargo : cData } ),;
                                  oLbxMethods : Reset(), HEval( oItem : GetSelected() : Cargo : aAttributes,;
                                     { | cKey, cData | oLbxMethods : Add( cKey + " : " + cData ) } ) }
    Return Nil
 
Alguna idea ? Muchísimas gracias

Saludos

Re: Leer un archivo xml

Posted: Tue Aug 28, 2018 2:59 pm
by horacio
+1

Re: Leer un archivo xml

Posted: Tue Aug 28, 2018 4:29 pm
by Sistem
fwh\samples\xmlreader.prg

Re: Leer un archivo xml

Posted: Tue Aug 28, 2018 4:53 pm
by horacio
Gracias por tu respuesta pero tampoco lee todos los nodos. Por eso probé con xmltree que los lee perfectamente.

Saludos

Re: Leer un archivo xml

Posted: Wed Sep 05, 2018 8:47 pm
by ACC69
horacio wrote:Gracias por tu respuesta pero tampoco lee todos los nodos. Por eso probé con xmltree que los lee perfectamente.

Saludos

Hola Ing. Horacio le paso el link donde podra ver como leer un xml.

Espero que le pueda ayudar en algo el codigo y lo adapte a su sistema.


http://forums.fivetechsupport.com/viewt ... ml#p163960

Saludos

Atte: Adriano C. C.