Обходной путь для ошибки «необъявленный префикс» в XElement.Load () - PullRequest
7 голосов
/ 26 сентября 2011

Я тяну источник сайта.Затем я хочу извлечь конкретную часть этого.Я собираюсь сделать это с помощью LINQ-to-XML.

Однако при синтаксическом анализе источника возникают ошибки:

XElement source = XElement.Load(reader);

Кажется, проблема в ссылках на пространства имен, которые я не используюестьЯ получаю ошибку: 'addthis' is an undeclared prefix. Line 130, position 51. из-за этой строки:

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

И если я удаляю эту, возникает другая.об одном куске этого XML-файла - мне не нужно разбирать весь файл.Я просто хочу это в XElement, чтобы я мог найти этот кусок.Есть ли способ для меня, чтобы взломать вокруг ошибки разбора?И мне нужно общее решение - я хочу проанализировать файл независимо от ЛЮБЫХ undeclared prefix ошибок.

Спасибо

1 Ответ

8 голосов
/ 26 сентября 2011

Этот XML недействителен.

Чтобы использовать префикс пространства имен (например, addthis:), пространство имен должно быть объявлено с помощью записи xmlns:addthis="some URI".

Как правило, вам не следует анализировать HTML с использованием синтаксического анализатора XML, поскольку HTML может быть недопустимым XML по этой и ряду других причин (необъявленные сущности, неэкранированные JS, незамкнутые теги).
Вместо этого используйте HTML Agility Pack .

...