Clase para leer XML desde PHP
5 seguidores
¿Me recomendáis alguna clase para leer XML desde PHP? He encontrado un puñado en sourceforge y todo eso pero o son muy complejas de usar ó no distinguen entre nodos y atributos, y no podemos cambiar los XML.
No tiene que ser nada del otro mundo... una (o varias) clases para poder leer los XML que usamos en un sitio hecho en flash desde su versión HTML, sin muchas piruetas a la hora de implementarlo.
¿Cual usáis?
dagi3d
¿tienes php5?
xavib
ieah
dagi3d
entonces mírate la api de dom, que viene de serie: http://es.php.net/dom
a mi me resulta muy cómodo parsear usando consultas de xpath: http://es.php.net/manual/en/function.dom-domxpath-query.php
xavib
Caramba, lo habia descartado hace rato por complicado pero ha sido decirlo tu y verlo fácil. Trasteo 10 minutillos y mañana más.
Gracias!
juandelgado
Yo buscando clases de XPath para PHP hace tiempo, encontre PHP XPATH.
A mi no me parecio super-facil de usar, pero al final mas o menos le pille el tranquillo. Cuando tenga tiempo le echare tambien un ojo a la de Dagi.
Salud!
xavib
Voy a echarle un ojo también, a ver qué tal. De todas formas, si es algo que se pueda resolver "de forma nativa" pues mejor que mejor.
He probado bastantes librerías y clases, si tienes tiempo para hacer pruebas avísame que posteo los enlaces de las más interesantes. Soy muy atún, así que el hecho de que no se ajusten a lo que yo creo que busco no significa que no puedan funcionarte...
KRLvisual
Para mi lo más fácil para leer XML es la clase simpleXML para PHP5.
Se trata de una extensión de PHP5 habilitada por defecto.
Os pongo un ejemplo de uso de un manual, para que veas lo fácil que es.
Extraído de Curso PHP5 - ACM Capítulo de Estudiantes - Facultad de Informática UPM (Iván Sánchez Ortega):
Para parsear un fichero en XML sólo hace falta instanciar un objeto de la clase simplexml.
$fichero = 'Basque_Chicken.xml';
$xml = simplexml_load_file($fichero) or die ('Unable to load XML file!');
Dentro de un nodo de XML (cualquier fragmento dentro de un tag de apertura y uno de cierre ), podemos acceder a los nodos hijos como si fueran atributos del objeto; y podemos acceder a las propiedades del nodo (el "href" dentro de un a href='http://loquesea.org') como elementos de un array (por ejemplo, $xml['href']):
$fichero = 'Basque_Chicken.xml';
$xml = simplexml_load_file($fichero) or die ('Unable to load XML file!');
echo "Versión de RecipeML: {$xml['version']} <br>";
echo "Título de la receta: {$xml->recipe->head->title} <br>";
xavib
Finalmente usé xpath. Parece más complicado de lo que es... resulta relativamente fácil acceder a los datos del XML.
Un mini-resumen acuchillero para ocasiones venideras:
<code>
$dom = new DomDocument();
$dom->load("misdatos.xml");
$xpath = new Domxpath($dom);
// para nodos
$datos = $xpath->query("//nodo/nodo/nodo/");
// para atributos
$datos = $xpath->query("//nodo/nodo/@atributo");
// para BUSCAR un atributo concreto
$datos = $xpath->query("//nodo/nodo[@atributo=\"valor\"]");
foreach ($datos as $dato) {
print_r($dato->nodeValue);
}
</code>
Ahora "peta" porque parece que no procesa correctamente los nodos o atributos con CDATA. Lo estoy mirando (voy a echar un vistazo al php xpath que me recomendaste, zárate), pero cualquier sugerencia es bienvenida :)
xavib
Qué mundo. Peta porque en los atributos NO puede haber CDATA. Definitivamente, hoy es lunes :P
xavib
Si que es lunes si...
Olvidé postear este enlace: http://weblogs.asp.net/nleghari/articles/27951.aspx
Se trata de una herramienta en la que se pueden cargar los XML y te da la ruta "xpath" exacta. Quitando las rutas absolutas ([]) podremos construir arrays o lo que nos apatezca usando el foreach.
Pensar menos es importante en dias como hoy.
alamarcheta
Hola. Me cuelo en vuestro post. ¿Como podría hacer para mostrar noticias RSS de una Web externa con PHP?
Os explico un poco mi problema:
En mi hosting tengo PHP5 y con el modulo XSLT se hace muy fácil y con dreamweaver chupado, pero ningún hosting te habilita este modulo (No se porque). Después utilice el MagpieRSS que funciona bien y fácil de poner, pero metí mi enlace de xml y en mi localhost recoge bien las noticias pero cuando subo al servidor no funciona. Me da el siguiente error:
<code>
Warning: MagpieRSS: Failed to fetch http://f1.gpupdate.net/es/xml/rss/4.xml (HTTP Error: connection failed (11) in /home/chs/site/home/html/magpierss/rss_fetch.inc on line 238
Warning: array_slice() [function.array-slice]: The first argument should be an array in /home/chs/site/home/html/noticias.php on line 25</code>
Y lo bueno que me funciono un par de horas bien en mi hosting. Cambie el link por uno del mundo y si que funciona bien, pero con ese ya no hay manera.
¿Puede ser que el site de noticias o el hosting me bloquee? La verdad yo flipo.
Saludos.
xavib
Ni idea de como funciona MagpieRSS pero en teoría con xpath deberías poder solucionarlo. No sé qué limitaciones hay en cuanto a comunicación entre servidores, pero a priori no debería dar problemas puesto que en realidad lo que estás haciendo con DomDocument es "cargar" el documento en un objeto, no leerlo directamente.
Prueba los enlaces que hay en este post, a ver qué encuentras.