Manejo de archivos XML

Post Reply
Jorge Jaurena
Posts: 145
Joined: Fri Oct 21, 2005 6:35 pm

Manejo de archivos XML

Post by Jorge Jaurena »

Hola.
Necesito leer y generar archivos xml, ¿habra alguna clase para esto?

Muchas Gracias.
Jorge Jaurena
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Re: Manejo de archivos XML

Post by ermatica »

Hola Jorge,

Mira estos post de Thefull:

http://forums.fivetechsupport.com/viewt ... &hilit=xml

http://forums.fivetechsupport.com/viewt ... &hilit=xml

Espero te ayuden,
Un saludo
Ernesto
Jorge Jaurena
Posts: 145
Joined: Fri Oct 21, 2005 6:35 pm

Re: Manejo de archivos XML

Post by Jorge Jaurena »

Gracias por la respuesta, me resulto muy util, pero necesitaria manejar xml en Harbour, ¿se podra?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Manejo de archivos XML

Post by Antonio Linares »

Harbour proporciona dos librerías para un uso muy eficiente de XML, ambas estan basadas en "Mini-XML":

http://www.minixml.org

Por un lado hay una versión desarrollada por Giancarlo Nicolai, que usa el codigo de MXML (Mini-XML) pero lo adapta a Harbour. El código esta desarrollado en lenguaje C y posiblemente sea muy eficiente (poco consumo de memoria y mucha velocidad de ejecución). Estas rutinas forman parte de la libreria xhb.lib de Harbour (fué un trabajo originalmente desarrollado para xHarbour y luego portado a Harbour).

La otra versión son wrappers a MiniXML usando el código original de MiniXML. Está en la carpeta hbmxml de contribs de Harbour. A ambas implementaciones se puede acceder desde el SVN en SourceForge de Harbour.

Aqui un ejemplo de uso de la implementación de Giancarlo:

xml1.prg

Code: Select all

#include "hbxml.ch"

PROCEDURE Main()
   LOCAL cFile := hb_dirBase() + "test.xml"
   LOCAL cString
   LOCAL cNote, cDiscount
   LOCAL oDoc, oBook, oIterator, oCurrent

   cString := MemoRead( cFile )

   IF Empty( cString )
      WAIT "xml file unavailable"
      RETURN
   ENDIF

   oDoc := TXmlDocument():New( cString, HBXML_STYLE_NOESCAPE )
   IF oDoc:nError != HBXML_ERROR_NONE
      WAIT "xml file parsing error " + Str( oDoc:nError )
      RETURN
   ENDIF

   oBook := oDoc:findfirst( "book" )
   IF oBook == NIL
      WAIT "no books found"
      RETURN
   ENDIF

   DO WHILE .T.

      IF "id" $ oBook:aAttributes
         ? "book ID : " + oBook:aAttributes[ "id" ]
      ELSE
         ? "no attribute book ID"
      ENDIF

      cNote := ""
      cDiscount := ""
      oIterator := TXmlIterator():New( oBook )

      DO WHILE .T.
         oCurrent := oIterator:Next()
         IF oCurrent == NIL
            ? "end branch"
            WAIT "values : " + cNote + " " + cDiscount
            EXIT
         ELSE
            ? "current tag : " + oCurrent:cName
            IF oCurrent:cName == "note"
               cNote := oCurrent:cData
            ELSEIF oCurrent:cName == "discount"
               cDiscount := oCurrent:cData
            ENDIF
         ENDIF
      ENDDO

      oBook := oDoc:findnext()
      IF oBook == NIL
         WAIT "no more books found"
         EXIT
      ENDIF

   ENDDO

   RETURN
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
Jorge Jaurena
Posts: 145
Joined: Fri Oct 21, 2005 6:35 pm

Re: Manejo de archivos XML

Post by Jorge Jaurena »

Muchas gracias Antonio, es justo lo que necesitaba.
Saludos
Post Reply