Используя C #, как я могу обнаружить неработающую ссылку или тег? - PullRequest
4 голосов
/ 05 октября 2010

У меня есть HTML-файл, который синтаксически неверен, я анализирую его с помощью HTML Agility Pack .

Но если у меня есть ссылка типа

<a href="http://google.com/!/!!!">Google</a>

это проблема, есть ли способ обнаружить неработающие ссылки, чтобы при обнаружении ошибки (по этой ссылке страница недоступна) приложение сохранит эту ссылку в списке и вернет ее?

Та же проблема с тегами, пример:

<img hhh="jjj"/>

здесь тег изображения неверен, он также должен быть в списке «ошибки для ремонта».

Заранее спасибо.

1 Ответ

3 голосов
/ 05 октября 2010

Вам нужно перебрать Document.DocumentNode.Descendants("a") и проверить, является ли тег href плохим.

Аналогично, вы можете просмотреть Document.DocumentNode.Descendants("img") и проверить атрибуты src.

EDIT

Чтобы проверить наличие плохих атрибутов, вы можете сохранить Dictionary<string, IEnumerable<string>>, который отображает имена тегов на допустимые атрибуты, а затем используйте LINQ для поиска отсутствующих атрибутов, например:

from tag in Document.DocumentNode.Descendants()
let legalAttributes = allAttributes[tag.TagName]
from attribute in tag.Attributes
where !legalAttributes.Contains(attribute.Name, StringComparer.OrdinalIgnoreCase)
select new { Tag = tag.OuterHtml, Attribute = attribute.Name }
...