Page 1 of 1

Manejo de archivos XML

Posted: Fri Apr 20, 2012 8:51 pm
by Jorge Jaurena
Hola.
Necesito leer y generar archivos xml, ¿habra alguna clase para esto?

Muchas Gracias.
Jorge Jaurena

Re: Manejo de archivos XML

Posted: Sat Apr 21, 2012 2:08 pm
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

Re: Manejo de archivos XML

Posted: Wed Apr 25, 2012 9:44 pm
by Jorge Jaurena
Gracias por la respuesta, me resulto muy util, pero necesitaria manejar xml en Harbour, ¿se podra?

Re: Manejo de archivos XML

Posted: Wed Apr 25, 2012 10:44 pm
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
 

Re: Manejo de archivos XML

Posted: Thu Apr 26, 2012 9:42 pm
by Jorge Jaurena
Muchas gracias Antonio, es justo lo que necesitaba.
Saludos