Page 1 of 2

O.T. Usando XML con xHarbour ( 2 parte )

Posted: Mon Sep 04, 2006 10:12 am
by thefull
Bueno, nos quedaba ver como crear un documento de XML,
alla vamos ;-)

Leccion: 3.0.- Guardaté, condenado...

Bien , nos quedaba pendiente el como guardar un documento XML, y mardita
la gracia , que no me di cuenta que , primero se construye el XML como
a uno le apetezca, y despues simplemente se guarda.

Para ello, tan simple como este ejemplo, para sacaros de dudas:

Creamos el documento EN MEMORIA!!!
oDoc := TXmlDocument():New()

Añadimos diferentes nodos:
oDoc:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_PI,'xml' , , 'version="1.0" encoding="iso-8859-1"' ) )
oDoc:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_COMMENT, , , "Ejemplo USO" ) )
oDoc:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_COMMENT, , , "Date: " + DToC( Date() ) + " Time: " + Time() ) )
oDoc:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_COMMENT, , , "Last access: " + GetEnv( "USERNAME" ) ) )

Como habiamos comentado, oRoot es la raiz, por lo tanto, estamos usando
la raiz del arbol para ir añadiendo nodos hijos, a traves del method
AddBelow( oNode )

Tambien , podemos observar como crear un nodo, y este con otros nodos
con sus propiedades:

oNewNodo := TxmlNode():New( HBXML_TYPE_TAG, "NUEVO" )

oConfig := TxmlNode():New( HBXML_TYPE_TAG, "config" )
oConfig:SetAttribute( "reserva", "222" )
oConfig:SetAttribute( "habitacion", "AB2" )

Fijaros como añadimos el nodo llamado oConfig, al nodo oNewNodo.
oNewNodo:AddBelow( oConfig )

Y el nodo , oNewNodo, al arbol principal del documento del XML
oDoc:oRoot:AddBelow( oNewNodo )

Bien, ahora, simplemente creamos el fichero donde volcar toda esta informacion
hFile := FCreate( "pepe.xml" )
If hFile != -1
// Y ESTO GUARDO EL TRABAJO QUE HABIAMOS REALIZADO!!!
oDoc:Write( hFile, HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES )
FClose( hFile )
Endif

Ya esta!!! Parece mentira, no es tan dificil cuando ves esto puesto en el
codigo fuente, que es lo que nos faltaba.

Agracedimientos:
A freddy,
sin su explicacion, no creo que hubiese comprendido la importancia
del uso de las clases de xHarbour

A Giancarlo,
por su estupendo trabajo realizado en xHarbour.
( Por cierto, esta documentado, pero...el english no es mi fuerte...
haber si alguien se anima a traducir el texto hbxml. )

Posted: Thu Oct 02, 2008 5:11 pm
by Otto
Hello thefull,

would you be so kind to post a working sample.
Thanks in advance
Otto

Posted: Thu Oct 02, 2008 11:25 pm
by Ricardo Ramirez E.
Rafa :

Gracias por compartir tus experiencias y conocimientos....

Posted: Tue Oct 07, 2008 3:55 pm
by thefull
Otto wrote:Hello thefull,

would you be so kind to post a working sample.
Thanks in advance
Otto
Otto, I do not understand you mean.
This post tries to explain how to handle create / read an XML from xHarbour.
If you refer you want to do, perhaps we can help put a concrete example

Regards
Rafa Carmona

Posted: Thu Nov 27, 2008 3:56 pm
by pymsoft
Rafa,

Gracias por tu explicacion, ya lo habia leido hace algun tiempo, no imaginé que iba a necesitar usarlo tan pronto.

De todos modos, como hago para salvar todo en UTF-16? Hay alguna funcion para pasar el texto a UTF-16?

Gracias.

Posted: Thu Nov 27, 2008 4:19 pm
by thefull
pymsoft wrote:Rafa,

Gracias por tu explicacion, ya lo habia leido hace algun tiempo, no imaginé que iba a necesitar usarlo tan pronto.

De todos modos, como hago para salvar todo en UTF-16? Hay alguna funcion para pasar el texto a UTF-16?

Gracias.
Bueno yo uso unas funciones Kevin Carmody, i@kevincarmody.com,
busca por UnicodeConvert.prg en Internet;
http://www.hmgextended.com/files/CONTRI ... onvert.prg

Lo que no sé si te servirá para UTF-16, yo lo uso para UTF-8 y va de muerte, código PRG puro y duro ;-)

Mirate la funcion UNITOU8() y similares por si te sirve de algo.

Posted: Thu Nov 27, 2008 5:33 pm
by pymsoft
Gracias!!!

ya estoy probando.


saludos

Dudas

Posted: Mon Dec 15, 2008 3:07 pm
by ermatica
Buenas Tardes Rafa (Thefull),

He empezado a usar esta clase en xHarbour y con tus explicaciones ha sido bastante sencillo. Tengo dos problemillas, el XML que tengo que generar es así:

Code: Select all

  <MATRICULACION ProcesarMatriculacion="0" Procesar576="0" Procesar05_06="0" ProcesarIMVTM="0">
    <NUMERO_EXPEDIENTE></NUMERO_EXPEDIENTE>
    <NUMERO_DOCUMENTO>TF000940402008017018</NUMERO_DOCUMENTO>
    <NUMERO_PROFESIONAL>000000</NUMERO_PROFESIONAL>
- En primer lugar el "identado" es de 2 espacios y no logro combinar dicha identación.

- Y en segundo lugar los "atributos" del TAG MATRICULACION, cuando los coloco en ese orden, no salen así, sino que los ordena de otra manera (he visto algo relacionado con el hash), cómo se deberían colocar para que salgan en el orden que uno quiere.

Muchas gracias de antemano.
Saludos
Ernesto

Posted: Tue Dec 16, 2008 4:53 pm
by joseluisysturiz
...

Re: Dudas

Posted: Tue Dec 16, 2008 5:58 pm
by thefull
Puedes poner el codigo fuente que generas eso ?

Sobre la indentacion , para que lo quieres ? eso no tiene ninguna importancia, como si estuviese todo en una linea.
Es una propiedad que le das a la hora de crear el documento XML.

Duda

Posted: Tue Dec 16, 2008 9:28 pm
by ermatica
En primer lugar darte las gracias por contestar,


Parte del código (faltan mas nodos finales):

Code: Select all

              oDoc:=TXMLDocument():New()
              oDoc:oRoot:AddBelow( TxmlNode():New(HBXML_TYPE_PI,'xml',,'version="1.0" encoding="ISO-8859-1"') )

              oNewNodo:=TxmlNode():New(HBXML_TYPE_TAG,"FORMATO_GA")
              oNewNodo:SetAttribute("FechaCreacion",dtoc(Date()) )
              oDoc:oRoot:AddBelow(oNewNodo)

                oCabe:=TxmlNode():New(HBXML_TYPE_TAG,"CABECERA")
                oNewNodo:AddBelow(oCabe)

                  oGest:=TxmlNode():New(HBXML_TYPE_TAG,"DATOS_GESTORIA")
                  oCabe:AddBelow(oGest)

                    oNifGest := TxmlNode() : New( HBXML_TYPE_TAG ,"NIF",,cNif_Gestoria )
                    oGest:AddBelow(oNifGest)

                    oNomGest := TxmlNode() : New( HBXML_TYPE_TAG ,"NOMBRE",,cNombre1_Gestoria )
                    oGest:AddBelow(oNomGest)

                    oProfGest := TxmlNode() : New( HBXML_TYPE_TAG ,"PROFESIONAL",,cProfesional_Gestoria )
                    oGest:AddBelow(oProfGest)

                    oProvGest := TxmlNode() : New( HBXML_TYPE_TAG ,"PROVINCIA",,cProvincia_Gestoria )
                    oGest:AddBelow(oProvGest)

              
                oMatri:=TxmlNode():New(HBXML_TYPE_TAG,"MATRICULACION")
                oMatri:SetAttribute("ProcesarMatriculacion","0" )
                oMatri:SetAttribute("Procesar576","0" )
                oMatri:SetAttribute("Procesar05_06","0" )
                oMatri:SetAttribute("ProcesarIMVTM","0" )
                oNewNodo:AddBelow(oMatri)

                  cNroExp:=""
                  oNroExp := TxmlNode() : New( HBXML_TYPE_TAG ,"NUMERO_EXPEDIENTE",,cNroExp )
                  oMatri:AddBelow(oNroExp)

                  cNroDoc:=alltrim(substr( (cAlias3)->A158,1,30) )
                  oNroDoc := TxmlNode() : New( HBXML_TYPE_TAG ,"NUMERO_DOCUMENTO",,cNroDoc )
                  oMatri:AddBelow(oNroDoc)

                  cNroProf:=alltrim( substr(mNROGES,1,5) )             
                  oNroProf := TxmlNode() : New( HBXML_TYPE_TAG ,"NUMERO_PROFESIONAL",,cNroProf )
                  oMatri:AddBelow(oNroProf)
           
               ...
               

              nMANEJADOR:=0
              IF (nMANEJADOR:=FCREATE(mPath_Pdf+cFichero+"XML",0))=-1
                  msgAlert( "Error Creación Fichero XML","AVISO")
              else
                  oDoc:Write(nMANEJADOR,HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES )
                  FClose(nMANEJADOR)
              ENDIF

Y esto es el .XML que genera (el principio):

Code: Select all

<?xml version="1.0" encoding="ISO-8859-1"?>
<FORMATO_GA FechaCreacion="16/12/2008">
   <CABECERA>
      <DATOS_GESTORIA>
         <NIF>43999999V</NIF>
         <NOMBRE>NOMBRE COMPLETO DEL</NOMBRE>
         <PROFESIONAL>00001</PROFESIONAL>
         <PROVINCIA>M</PROVINCIA>
      </DATOS_GESTORIA>
   </CABECERA>
   <MATRICULACION Procesar05_06="0" Procesar576="0" ProcesarIMVTM="0" ProcesarMatriculacion="0">
      <NUMERO_EXPEDIENTE></NUMERO_EXPEDIENTE>
      <NUMERO_DOCUMENTO>TF002750402008152712</NUMERO_DOCUMENTO>
      <NUMERO_PROFESIONAL>00001</NUMERO_PROFESIONAL>
Como puedes ver en el nodo MATRICULACION aparecen los atributos con un orden distinto al puesto en el código.


Un cordial saludo
Ernesto

Posted: Tue Dec 16, 2008 10:51 pm
by joseluisysturiz
Bueno, nos quedaba ver como crear un documento de XML,
alla vamos ;-)

Leccion: 3.0.- Guardaté, condenado...


thefull, podrias colocar el link de las primeras partes..? gracias...

Re: Duda

Posted: Wed Dec 17, 2008 10:41 am
by thefull
Es curioso si, parece ser un tema de Hash, que efectua una ordenación de los atributos, quizás... no lo he visto, pero tiene toda la pinta.

De todas maneras, esto NO TIENE mayor importancia.

Me tiene intrigado el tema, ¿ cual es el problema exactamente ?
Esto es como:

"El orden de los factores no altera el resultado" :-)

Saludos
Rafa Carmona

Re:

Posted: Wed Dec 17, 2008 11:05 am
by thefull
No cuesta mucho buscar en los foros, fijate arriba de la pagina, por si no lo has visto;
http://forums.fivetechsoft.com/viewtopi ... hlight=xml

Re:

Posted: Wed Dec 17, 2008 2:45 pm
by joseluisysturiz
thefull wrote:No cuesta mucho buscar en los foros, fijate arriba de la pagina, por si no lo has visto;
http://forums.fivetechsoft.com/viewtopi ... hlight=xml
TheFull, disculpa la molestia, pero hice la busqueda como siempre por el tema O.T. Usando XML en xHarbour y me salieron 3200 coincidencias, llevaba varias paginas y no lo veia y le dije por palabras exactas y salio que no habia coincidencia, por eso hice la solicitud, gracias de todas maneras, uso la BUSQUEDA desde siempre, a lo mejor la pase entre las coincidencias y no vi el tema, aunque esta facil por el O.T, pero bueno, ya lo tengo y le hare el seguimiento ya que me interesa el tema, gracias una ves mas por tus aportes.saludos... :shock: