viernes, 30 de enero de 2015
Usando mxml
Debido a los problemas de memoria usando la clase TXMLDocument, he decidido usar directamente la librería mxml.
Pongo un ejemplo de COMO se obtienen los datos a partir de una cadena que contiene el XML.
Parece una tonteria, pero no he encontrado un ejemplo tan simple como esto.
Espero os ayude
function read_xml()
Local htree, hNode, cType, hTarifa, hNext, hDias, hDia, hHab, hPrecios
Local xml := [<?xml version="1.0" encoding="UTF-8"?> ]+;
[<Precios>]+;
[ <Tarifa Codigo="BAR" Tipo="DIARIO" ImpuestosIncluidos="true" >]+;
[ <Habitacion Tipo="DOB1" PAX="1">]+;
[ <DIAS>]+;
[ <Dia Precio="1" Fecha="01-08-2013" Estado="A"/>]+;
[ <Dia Precio="2" Fecha="02-08-2013" Estado="C"/>]+;
[ </DIAS>]+;
[ </Habitacion>]+;
[ <Habitacion Tipo="DOB2" PAX="2">]+;
[ <DIAS>]+;
[ <Dia Precio="3.1415" Fecha="01-08-2013" Estado="A"/>]+;
[ <Dia Precio="3.1415" Fecha="02-08-2013" Estado="A"/>]+;
[ </DIAS>]+;
[ </Habitacion>]+;
[ </Tarifa>]+;
[</Precios>]
hTree = mxmlLoadString( nil, xml )
IF Empty( hTarifa := mxmlFindElement( hTree, hTree, "Tarifa",,, MXML_DESCEND ) )
OutErr( "Unable to find first <tarifas> element in XML tree!" + hb_eol() )
mxmlDelete( hTree )
ErrorLevel( 1 )
QUIT
endif
Alert( "Tarifa coger atributos:"+ mxmlGetElement( hTarifa ) )
Alert( "Codigo Tarifa.:" + mxmlElementGetAttr( hTarifa, "Codigo" ) + hb_osnewline() + ;
"Tipo de Tarifa:" + mxmlElementGetAttr( hTarifa, "Tipo" ) + hb_osnewline() +;
"Impuestos.....:" + mxmlElementGetAttr( hTarifa, "ImpuestosIncluidos" ) )
hNext := mxmlWalkNext( hTarifa, hTree, MXML_DESCEND ) // Cogo habitacion1 porque hTarifa es el nodo principal
while hNext != NIL
Alert( "Hab:" + mxmlElementGetAttr( hNext, "Tipo" ) )
hDias := mxmlWalkNext( hNext, hTree, MXML_DESCEND ) // Cojo nodo DIAS, descendiendo un nivel
hDia := mxmlWalkNext( hDias, hTree, MXML_DESCEND ) // Cojo nodo DIA , descendiendo un nivel
while hDia != NIL
alert( "DIA :" + mxmlGetElement( hDia ) + "-->" + mxmlElementGetAttr( hDia, "Precio" ) )
alert(" " + mxmlGetElement( hDia ) + "-->" + mxmlElementGetAttr( hDia, "Fecha" ) )
alert(" " + mxmlGetElement( hDia ) + "-->" + mxmlElementGetAttr( hDia, "Estado" ) )
hDia := mxmlGetNextSibling( hDia ) // Siguiente Node dia, al mismo NIVEL
end while
hNext := mxmlGetNextSibling( hNext ) // El siguiente nodo es la habitacion, mismo NIVEL
end while
alert( "mira:" + MXMLSAVEALLOCSTRING( hTree ))
mxmlDelete( hTree )
return nil
Suscribirse a:
Enviar comentarios (Atom)
Android y Git. Disponer del hash automáticamente.
Una de las cosas a las que estoy acostumbrado, es tener siempre en mi código, el hash/tag/versión del control de versiones que estoy usan...

-
Voy a publicar una serie de post sobre las funciones de threads que espero os sirva para comprender como podeis sacar provecho a ...
-
Os muestro un pequeño video de las posibilidades de Harbour funcioanando como un servidor Web. Dentro de /contrib/httpd, tenéis un serv...
-
Estaba yo con mis cosas, y repasando la lista de correo de harbour, leí que alguien ponía una función, llamada OrdWildSeek Buscando más...
Hola, estoy teniendo inconveniente al querer leer un atributo llamado "Año". Debo poner algo extra para corregirlo?
ResponderEliminarSaludos.