![]() |
xpath para conseguir datos Hola a todos! Comence un post en el foro de PHP y alli nos hemos quedado atascados... A ver si aqui hay mas suerte, ya que el XML es el tema central de la duda... ;) Tengo un codigo XML que os muestro abajo y del que tengo que extraer datos con php. Código: <vpt la=1 lo=2>Código: Como puedo hacerlo para que solo me devuelva fecha1 y fecha 2 que son los que estan dentro de las primeras <gpk:logs>? En el otro foro me dicen que juegue con el xpath hasta dar con el bueno que solo me muestre los datos del primer <gpk:logs></gpk:logs>, pero no tengo ni idea de la sintexis de estos querys... Podeis echarme una mano?? MUchisimas gracias por vuestra ayuda. |
Re: xpath para conseguir datos Nadie me puede echar una mano? |
Re: xpath para conseguir datos A ver si entiendo, el XML es correcto y sobre el no tienes ninguna duda, tu duda es como mostrar los datos mediante PHP, pues tienes que preguntar en PHP, pero dices que ya lo hiciste... Bien, ahora dices que te salen todas las fechas pero tu necesitas solamente la primera ? en vez del bucle puedes hacer esto echo $ldate[1].'</br>'; así no te mostrará todas, sino la primera ( en verdad de be ser 0 no 1, checkealo) Espero que te sirva Saludos |
Re: xpath para conseguir datos En php me dijeron qque preguntara aqui... No es la primera la que quiero, si no las que hay en el primer <gpk:logs> , en este caso, fecha1 y fecha2... Gracias no obstante por tu respuesta... A ver si lo soluciono pronto que llevo ya muchos dias... |
Re: xpath para conseguir datos Si lo que quieres es el el primer <gpk:logs>, la sentencia XPath es: "//gpk:logs[position()=1]" Si lo que quieres es el <gpk:logs> de la primera etiqueta <vpt>, la sentencia XPath es: "/nodos_de_niveles_anteriores/vpt[position()=1]/gpk:logs" Estoy suponiendo que el XML está definido correctamente con un namespace para el prefijo "gpk". Algo así como, el prefijo "aws" que usa Amazon: Código: <?xml version="1.0" encoding="UTF-8"?> |
Re: xpath para conseguir datos Lo que quiero son los contenidos de las etiquetas <gpk:log>, que estan dentro de la etiqueta <gpk:logs>. Esta a su vez esta dentro de <vpt>. Pero solo las del primer <vpt>, no los siguientes... A ver probando con las sintaxis estas que me das... |
Re: xpath para conseguir datos Cita:
"/nodos_de_niveles_anteriores/vpt[position()=1]/gpk:logs/gpk:log" |
Re: xpath para conseguir datos Gracias, voy a ver... ;) |
Re: xpath para conseguir datos No consigo que me devuelva lo que quiero... Hay un problema. Antes de devolver los datos canta un error: Warning: SimpleXMLElement::xpath() [function.SimpleXMLElement-xpath]: Undefined namespace prefix in C:\Program Files\xampp\htdocs\pagina\index.php on line 124 la linea 124 quedo asi: $etiquetas = $xml->xpath( "/vpt[position()=1]/gpk:logs/gpk:log" ); he probado a añadir nodos anteriores hasta la misma base del xml, pero nada... Hay algun codigo que me muestre los distintos xpath que tiene un xml??? para asi asegurar que estoy poniendo el correcto... Algo visual. |
Re: xpath para conseguir datos Cita:
Mira el post #5 en el que puse un ejemplo de como son los XML de Amazon. Si tienes alguna clase de UNIX o LINUX, puedes validar tu documento XML con el comando xmlwf. Si no, tambien puedes hacerlo en ésta página: http://www.w3schools.com/dom/dom_validate.asp Cita:
Free XPath Query Tool (online) Visual Xpath (no online) |
Re: xpath para conseguir datos El visual xpath me funciono, el otro no supe usarlo. Al seleccionar la etiqueta, me da este xpath (para el log1 del logs del primer vpt): Código: /def:gpx/def:vpt[1]/gpk:cach/gpk:logs/gpk:log[1]He validado el codigo en la direccion web que me diste y no hay errores. |
Re: xpath para conseguir datos Pues el error dice que el problema está en un namespace no definido. Si puedes modificar el XML, una alternativa es no utilizar namespaces; es decir, elimina todos prefijos "gpk:", "def:", ... de tu fichero XML. |
Re: xpath para conseguir datos La cosa es que no es mi fichero. Lo que estoy intentado es convertir un archivo externo . Yo no me manejo nada con xml, por lo que lo que quiero pasar la info a mysql, y para eso es lo que ando luchando. estoy cogiendo los datos de cada etiqueta para pasarlos a mi base de datos. Por eso, si supiese como quitar los namespaces, no tendria ningun problema... |
Re: xpath para conseguir datos Creo que aunque el XML pase la validación no está bien definido. Lo unico que se me ocurre, aunque es un poco chapuza, es que copies el XML en tu servidor, luego le quitas los namespaces, lo utilizas para guardar las etiquetas deseadas en tu BBDD y luego lo borras. |
Re: xpath para conseguir datos Hola Juanvivo, Recuerda en el POST primero en el foro de PHP, te comente que debías de usar SimpleXMLElement::registerXPathNamespace, si no, no podrás realizar el xpath que quieres usar. Saludos. |
Re: xpath para conseguir datos Ya lo uso. |
Re: xpath para conseguir datos Pues al final creo que he encontrado una solucion, poco ortodoxa pero solucion... Me voy a cargar todos los namespaces, simplemente haciendo una pequeña aplicacion que sustituya en el fichero el texto gpk:log , por ejemplo, por gpklog , y de esta manera lo tomara como una etiqueta normal, no??? y esto no creo que afecte al resultado final... |
| La zona horaria es GMT -6. Ahora son las 03:01. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.