2011-03-18 16 views
6

Estoy tratando de analizar un feed de blogspot utilizando xpath pero no parece funcionar con nada de lo que intento. No estoy seguro de si es por los espacios de nombres o qué, pero esperaba que alguien pudiera ayudarme. Aquí está el código:problemas de php xpath

$xml = simplexml_load_file('http://feeds.feedburner.com/blogspot/MKuf'); 

$next = $xml->xpath("//link[@rel='next']"); 
print_r($next); 

Esto simplemente devuelve una matriz vacía y no debería ser. Lo intenté haciendo solo un enlace o solo entrada y todavía está volviendo vacío. El único que puedo ejecutar en él que funciona es *. Cualquier ayuda es apreciada.

+0

Su xpath parece estar equivocado, en realidad devuelve cero elementos. ¿Qué intentas lograr? –

+0

El documento tiene un espacio de nombre predeterminado que debe registrar antes de poder consultarlo con XPath. – Gordon

+1

posible duplicado de [DOM XPath Query Help] (http://stackoverflow.com/questions/5341995/dom-xpath-query-help) – Gordon

Respuesta

10

Como ya se dijo en la pregunta de comentario, el documento tiene un espacio de nombre predeterminado que debe registrar antes de poder consultarlo con XPath.

Desde el duplicado vinculado sólo muestra cómo hacerlo con DOM, voy a añadir un ejemplo SimpleXML

$feed = simplexml_load_file('http://feeds.feedburner.com/blogspot/MKuf'); 
$feed->registerXPathNamespace('f', 'http://www.w3.org/2005/Atom'); 
foreach ($feed->xpath('//f:link[@rel="next"]') as $link) { 
    var_dump($link); 
} 
Manual

Página: http://de.php.net/manual/de/simplexmlelement.registerxpathnamespace.php

Live Demo

3

Como dijo Gordon, es necesario para registrar el espacio de nombre predeterminado del documento XML, como este:

$xml->registerXPathNamespace('default', 'http://www.w3.org/2005/Atom'); 

y luego usar el prefijo default para referirse a elementos normales:

$next = $xml->xpath("//default:link[@rel='next']"); 

versiones más recientes pueden permitirá definir el valor por defecto ('') de espacio de nombres. Consulte http://www.qc4blog.com/?p=281 para obtener más información.

+0

gracias, de hecho, descubrí eso también. Intenté hacerlo con el anterior y es por eso que estaba fallando. – ngreenwood6

+0

¿Alguna de estas respuestas resolvió su problema? Háganos saber haciendo clic en la marca de verificación al lado y marque uno como respuesta. –