Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo puedo leer los datos de este xml!! (https://www.clubdelphi.com/foros/showthread.php?t=62921)

bone 21-01-2009 11:55:46

Cómo puedo leer los datos de este xml!!
 
Hola a tod@s,
lo primero decir que soy nuevo aquí y he estado buscando por varios sitios pero no he encontrado ninguna posible solución de poder leer este documento xml:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<Event>
<Pepe Angle="1.5437588697563402" Range="7.200984157558928" altitude="380.892" entityID="2003" event="Position" latitude="36.710891754656565" longitude="67.21611066229325" request="0" timestamp="1229331438562"/>
</Event>

Lo mas que me he acercado ha sido a que me muestre el nombre, los demas nodos no se cómo tratarlos, he hecho lo siguiente:

ShowMessage(XML.DocumentElement.ChildNodes[0].NodeName);

Estoy completamente atascado, he probado también ésto:
XML.DocumentElement.ChildNodes[0].ChildNodes[1].NodeName

pero me da el error de "list index out of bound"

Agradezco cualquier tipo de ayuda

dec 21-01-2009 12:34:07

Hola,

Sé bienvenido al ClubDelphi. Me temo que no voy a poder darte una respuesta concreta, sin embargo, tal vez puedas recoger alguna idea de lo siguiente: en realidad lo que estás buscando son "atributos" de un determinado "nodo". Ya estás pudiendo acceder a dicho "nodo", como dices, puedes acceder al nombre de ese "nodo". Pues bien, ese nodo ha de tener "atributos", y estos son en realidad, según se ve, los que contienen los valores que te interesan. Así que no debes buscar "nodos" del "nodo", sino "atributos" del "nodo" en cuestión. Echa un vistazo al resto de propiedades del "nodo", de la misma manera que accedes a su nombre, debes poder acceder a sus "atributos". Lamento no poder decirte otra cosa. :rolleyes:

bone 21-01-2009 12:52:51

Gracias, lo probare y te comento

Neftali [Germán.Estévez] 21-01-2009 13:22:24

Bueno, conseguir leerlo (y ponerlo en un Grid, por ejemplo) desde Delphi es bastante fácil.

El componente TClientDataset permite leer ficheros XML de disco.
* Graba el contenido en un fichero XML que llanmaremos test.XML.
* Crea un nuevo proyecto delphi y añade los siguientes componentes:
(TDbGrid, TDataSource, TClientDatset y un TXMLTransformProvider -luego veremos para qué...-)

...

NOTA: Creo que acabo antes si grabo cómo se hace y lo ves (por eso de más vale 1 imagen que mil palabras) y además creo que va a ser más rápido. ;)

Una vez que tengas los componentes en el form y el fichero XML, sigue estos pasos. LINK DEMO
(la demo son 3 MG, así que paciencia, tarda un poquito en cargar...)
El fichero de transformación deberá sevir para todos los XML que lleguen con esa estructura.

Un saludo.

dec 21-01-2009 13:38:52

Hola,

Joroba, se quejará el compañero... con una película con lo que puede hacer y todo... :) ;)

bone 21-01-2009 15:22:48

Lo primero, gracias a ambos por vuestro tiempo y dedicacion.

Neftali, lo que me digiste me ayudó muchisimo, pero ahora me han especificado mejor lo que tengo que hacer y me han pasado el fichero xml completo y tiene unas 700 líneas, o nodos, no estoy muy puesto en ficheros xml, y aparte de eso la carpeta que los contiene tiene también unos 700 xml con la misma estructura.

La cuestión es que lo he probado según tu video, y con tantos no funciona, me aparece el error de: "ERROR: Couldn´t create a transformation", después de hacer los siguientes pasos: tools -> xml mapper -> file -> open -> una vez abierto -> bton derecho -> select all -> create datapacket from xml y el recuadro de datapacket me aparece vacio pero pone arriba <Generated>, pulso el boton de 'create and test transformation' y es cuando me aparece el error abajo en la derecha.

Si se os ocurre alguna forma de solucionarlo, estoy abierto a cualquier sugerencia, ya que me han puesto un plazo muy corto de tiempo para entregarlo, no obstante seguiré investigando la manera de solucionarlo y si encuentro alguna solución la posteare para futuras dudas.

Gracias por vuestro tiempo y un saludo

Neftali [Germán.Estévez] 21-01-2009 16:12:00

Hola bone.
La verdad es que son pocos datos; Si tener el fichero XML es difícil saber porqué puede estar sucediendo el error; Tal vez por el número de nodos, tal vez por la estructura, tal vez por caracteres raros en el contenido. En realidad puede ser cuelquier cosa. :confused::confused:

Si tienes posibilidad de subir ese fichero, súbelo y podemos hacer pruebas.

La otra opción es "parsear" el fichero de forma manual, para ir extrayendo datos. Eso te representará más trabajo y más posibilidad de errores.

Un saludo.

bone 21-01-2009 16:32:23

Gracias Neftali, pero mas o menos he conseguido obtener los datos de todos los nodos, es una forma un poco rudimentaria pero funciona, ya que me corre prisa y es una aplicación interna, lo que he hecho es lo siguiente:

un bucle que me recorra todos los nodos y para que me muestre el contenido de los atributos:
XMLDocument.DocumentElement.ChildNodes[i].Attributes['nombreAtributo']

No obstante cuando tenga más tiempo seguiré investigando la forma de obtener los atributos automáticamente.
Siento no poder mandarte el fichero pero son unos datos confidenciales, ya me entiendes, por seguridad.

Gracias por tu ayuda y si descubro algo nuevo lo postearé.

Salu2

Neftali [Germán.Estévez] 21-01-2009 17:09:03

Cita:

Empezado por bone (Mensaje 335365)
Siento no poder mandarte el fichero pero son unos datos confidenciales, ya me entiendes, por seguridad.

Ok, era previsible.

Un saludo.

rgstuamigo 21-01-2009 19:49:50

Para trabajar con XML desde Delphi
te aconsejo que mires este tremendo libro de trucos , en la pagina 211 hacia adelante se habla del tema, pues Delphi ya tiene componentes para esto.
Te aconsejo que lo leas completo pues es una mina para aquellos que quieren
aprender.;)

Neftali [Germán.Estévez] 22-01-2009 10:56:34

Buena recopilación.

Gracias.

omarson 25-01-2011 19:12:45

el link me aparece como roto me podrias pasar de nuevo el link gracias muy buen aporte neftali
el del demo

javierjmartinez 23-02-2011 05:03:56

Busqueda Incremental En Delphi Con Lectura De Archivo Xml
 
Video que muestra como cargar archivos XML mediante un ClientDataSet para hacer búsquedas incrementales.... puede serles de utilidad; en Dailymotion. No puedo colocarles en enlace, por reglas del foro.

Saludos,

Javier.-

Neftali [Germán.Estévez] 23-02-2011 09:15:18

Cita:

Empezado por javierjmartinez (Mensaje 391691)
No puedo colocarles en enlace, por reglas del foro.

Hola Javier.
Intenta colocar el enlace utilizando alg así: h_t_t_p_:_//enlace_correcto

javierjmartinez 23-02-2011 14:39:51

Sobre La Busqueda Incremental En Delphi Con Lectura De Archivo Xml
 
Espero que lo vean como un aporte y no me baneen por incumplir las reglas del foro ...

ya que no se me permite, colocar enlaces como el colega me explica:

simplemente van a dailymotion (el sitio de la red de videos en donde mejor se ve el video) y colocan en buscar "BUSQUEDA INCREMENTAL EN DELPHI - VIDEO 01"

Es una secuencia de tres videos, donde se explica como realizar búsquedas incrementales en Delphi con el mínimo de código y leyendo uno de los archivos XML que vienen con la versión 7.

Saludos, colegas.

Javier.-

Neftali [Germán.Estévez] 23-02-2011 15:57:00

He aquí los videos en cuestión:

busqueda-incremental-en-delphi-video-01
busqueda-incremental-en-delphi-video-02
busqueda-incremental-en-delphi-video-03

javierjmartinez 23-02-2011 17:29:49

Saludos, colega Neftali ...
 
En efecto ... el colega acaba de colocar los enlaces respectivos que no pude colocar, por ser nuevo usuario.

Saludos, estimado Neftalí. Espero los videos sean de utilidad.

Cordial abrazo a la comunidad.

Javier.-


La franja horaria es GMT +2. Ahora son las 14:15:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi