2012-03-15 25 views
6

Estoy tratando de analizar el feed RSS de este enlace http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss pero cuando intento mostrar los resultados que me da el siguiente error:Apertura y etiqueta de cierre de desajuste y Fin prematuro de los datos en la etiqueta RSS

Advertencia: DOMDocument :: carga() [domdocument.load]: Apertura y finalización de etiquetas no coincidentes: línea fuerte 208 y descripción en http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss, línea: 209 en C: \ wamp \ www \ gazetaExpress \ scripts \ reader.php en la línea 17

así como

Advertencia: DOMDocument :: load() [domdocument.load]: fin prematuro de los datos en la etiqueta de la línea 2 en RSS http://www.gazetaexpress.com/rss.php?cid=1,13&part=rss, línea: 226 en C: \ wamp \ www \ gazetaExpress \ scripts \ reader.php en la línea 17

el script que estoy usando para el análisis es

$xmlDoc->load($xml); 

$x=$xmlDoc->getElementsByTagName('item'); 

for ($i=0; $i<6; $i++) { 
    $item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue; 
    $item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue; 
    $item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue; 

// and echo statements 

} 

cuando trato de algún otro canal RSS de este sitio (como deportes: http://www.gazetaexpress.com/rss.php?cid=1,24&part=rss), que funciona bien. Es exactamente el feed rss anterior que no funcionará. ¿Hay alguna forma de evitar esto? cualquier ayuda sería muy apreciada.

+1

El error está en la construcción/creación del feed en sí. No hay nada que realmente pueda hacer al respecto (a menos que sea el autor del feed). –

+0

La mejor manera sería ponerse en contacto con el sitio e informarles que su fuente RSS está rota. Opera da este error: El análisis XML falló El análisis XML falló: error de sintaxis (Línea: 209, Carácter: 159) Error: etiqueta final no coincidente – h00ligan

Respuesta

6

Esto se debe al uso de <br> y otras etiquetas de cierre automático. El dom trata de encontrar el final como éste, donde <br/><br es empezar y /> es extremo. Los navegadores modernos no tendrán problemas con <tag>, pero la función php dom aún quiere que guarde el estándar XML, por lo que debe buscar al <singletags> y reemplazarlos por <singletags /> que funciona bien.

4

Cuando el fragmento que desea analizar no se ajusten a las especificaciones de XML (por ejemplo, las etiquetas de cierre automático sin '/' o etiquetas sin cerrar) y si dosesn't contienen identificadores duplicados se puede tratar con loadHTML, es más permisiva .

$xmlDoc->loadHTML($xml); 
Cuestiones relacionadas