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

User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

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

Post 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. )
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
Otto
Posts: 4470
Joined: Fri Oct 07, 2005 7:07 pm
Contact:

Post by Otto »

Hello thefull,

would you be so kind to post a working sample.
Thanks in advance
Otto
User avatar
Ricardo Ramirez E.
Posts: 161
Joined: Wed Jan 25, 2006 10:45 am
Location: Praia - Cape Verde
Contact:

Post by Ricardo Ramirez E. »

Rafa :

Gracias por compartir tus experiencias y conocimientos....
Saludos
Ricardo R.
xHarbour 1.1.0 Simplex , Microsoft Visual Studio 2008, Bcc55, Fwh Build. 9.01
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Post 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
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post 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.
Pedro Gonzalez
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Post 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.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
pymsoft
Posts: 383
Joined: Tue Oct 11, 2005 1:01 pm
Location: Savona - Italia
Contact:

Post by pymsoft »

Gracias!!!

ya estoy probando.


saludos
Pedro Gonzalez
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Dudas

Post 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
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Post by joseluisysturiz »

...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Dudas

Post 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.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
ermatica
Posts: 44
Joined: Mon Nov 12, 2007 1:50 pm
Location: España

Duda

Post 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
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Post 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...
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Duda

Post 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
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re:

Post 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
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re:

Post 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:
Dios no está muerto...

Gracias a mi Dios ante todo!
Post Reply