O.T. Usando XML con xHarbour ( 2 parte )
O.T. Usando XML con xHarbour ( 2 parte )
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. )
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__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
- Ricardo Ramirez E.
- Posts: 161
- Joined: Wed Jan 25, 2006 10:45 am
- Location: Praia - Cape Verde
- Contact:
Otto, I do not understand you mean.Otto wrote:Hello thefull,
would you be so kind to post a working sample.
Thanks in advance
Otto
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__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Bueno yo uso unas funciones Kevin Carmody, i@kevincarmody.com,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.
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__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Dudas
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í:
- 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
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>
- 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
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Dudas
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.
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__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Duda
En primer lugar darte las gracias por contestar,
Parte del código (faltan mas nodos finales):
Y esto es el .XML que genera (el principio):
Como puedes ver en el nodo MATRICULACION aparecen los atributos con un orden distinto al puesto en el código.
Un cordial saludo
Ernesto
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
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>
Un cordial saludo
Ernesto
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Duda
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
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__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Re:
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
http://forums.fivetechsoft.com/viewtopi ... hlight=xml
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re:
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...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
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!