Leer un archivo xml

Leer un archivo xml

Postby horacio » Mon Aug 27, 2018 4:08 pm

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

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

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

   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
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Leer un archivo xml

Postby horacio » Tue Aug 28, 2018 2:59 pm

+1
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Leer un archivo xml

Postby Sistem » Tue Aug 28, 2018 4:29 pm

fwh\samples\xmlreader.prg
FWH2008 | xHarbour | BCC74 | SQLRDD
User avatar
Sistem
 
Posts: 226
Joined: Sun May 13, 2012 7:52 am

Re: Leer un archivo xml

Postby horacio » Tue Aug 28, 2018 4:53 pm

Gracias por tu respuesta pero tampoco lee todos los nodos. Por eso probé con xmltree que los lee perfectamente.

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Leer un archivo xml

Postby ACC69 » Wed Sep 05, 2018 8:47 pm

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.


viewtopic.php?f=6&t=29048&p=163960&hilit=leer+un+archivo+xml#p163960

Saludos

Atte: Adriano C. C.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 9 guests