2011-09-26 21 views
5

Sto prelevando la fonte di un sito Web. Quindi voglio estrarne una parte specifica. La mia intenzione è di farlo con LINQ-to-XML.Soluzione alternativa per l'errore "prefisso non dichiarato" su XElement.Load()

Tuttavia, ottengo errori quando ho analizzare il sorgente:

XElement source = XElement.Load(reader); 

Il problema sembra essere riferimenti a spazi dei nomi non ho. Ottengo l'errore: 'addthis' is an undeclared prefix. Line 130, position 51. a causa di questa linea:

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

E se elimino che uno, altro verificarsi.

La cosa è, mi interessa solo un pezzo di questo file XML - Non è necessario essere in grado di analizzare l'intero file. Lo voglio solo in un XElement, quindi posso trovarlo un pezzo. C'è un modo per aggirare l'errore di parsing? E ho bisogno di una soluzione generica - Voglio analizzare il file indipendentemente da eventuali errori undeclared prefix.

Grazie

risposta

5

Questo XML non è valido.

Per utilizzare un prefisso dello spazio dei nomi (come addthis:), è necessario dichiarare lo spazio dei nomi, scrivendo xmlns:addthis="some URI".

In generale, non è necessario analizzare l'HTML utilizzando un parser XML, poiché HTML potrebbe essere XML non valido, per questo motivo e una serie di altri motivi (entità non dichiarate, JS senza escape, tag non chiusi).
Utilizzare invece HTML Agility Pack.

+0

Hai ragione, e mi sento un po 'sciocca per la domanda. Grazie per il link, sembra essere quello di cui ho bisogno. –

Problemi correlati