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 ...
-
Después de más de 2 años, sacrificando fin de semanas y tiempo libre, he podido pasar a una versión totalmente funcional. El Sofware es ca...
-
Os muestro un pequeño video de las posibilidades de Harbour funcioanando como un servidor Web. Dentro de /contrib/httpd, tenéis un serv...
Hola, estoy teniendo inconveniente al querer leer un atributo llamado "Año". Debo poner algo extra para corregirlo?
ResponderEliminarSaludos.