2011-09-26 61 views
5

Estoy sacando el origen de un sitio web. Entonces quiero extraer una parte específica de ella. Mi intención es hacer esto con LINQ-to-XML.Solución para el error de "prefijo no declarado" en XElement.Load()

Sin embargo, tengo errores cuando analizo la fuente:

XElement source = XElement.Load(reader); 

El problema parece ser referencias a espacios de nombres que no tengo. Me sale el error: 'addthis' is an undeclared prefix. Line 130, position 51. debido a esta línea:

<div class="addthis_toolbox addthis_pill_combo" addthis:url="http://www.foo.com/foo"> 

Y si elimino que uno, existen otros problemas.

Thing es, solo me importa una parte de este archivo XML. No es necesario que pueda analizar todo el archivo. Solo quiero que esté en un XElement para que pueda encontrar esa pieza. ¿Hay alguna forma de piratear el error de análisis? Y necesito una solución genérica: quiero analizar el archivo independientemente de CUALQUIER error undeclared prefix.

Gracias

Respuesta

5

Este XML no es válido.

Para utilizar un prefijo de espacio de nombres (como addthis:), debe declararse el espacio de nombres escribiendo xmlns:addthis="some URI".

En general, no debe analizar HTML utilizando un analizador XML, ya que es probable que HTML no sea válido XML, por esta razón y varias otras razones (entidades no declaradas, JS no guardadas, etiquetas no cerradas).
En su lugar, use HTML Agility Pack.

+0

Tienes razón, por supuesto, y me siento un poco tonto por preguntar. Gracias por el enlace, parece ser lo que necesito. –

Cuestiones relacionadas