FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Leer un archivo xml
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Leer un archivo xml
Posted: Mon Aug 27, 2018 04: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 (fw): Select all Collapse
        <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 (fw): Select all Collapse
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 (fw): Select all Collapse
   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
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Leer un archivo xml
Posted: Tue Aug 28, 2018 02:59 PM

+1

Posts: 226
Joined: Sun May 13, 2012 07:52 AM
Re: Leer un archivo xml
Posted: Tue Aug 28, 2018 04:29 PM

fwh\samples\xmlreader.prg

FWH2008 | xHarbour | BCC74 | SQLRDD
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Leer un archivo xml
Posted: Tue Aug 28, 2018 04:53 PM

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

Saludos

Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Leer un archivo xml
Posted: Wed Sep 05, 2018 08: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.

Continue the discussion