Получение метатегов и комментариев с помощью HTML Agility Pack

Я искал учебные пособия по использованию HTML Agility Pack, поскольку он, кажется, делает все, что я хочу, но кажется, что для такого мощного инструмента в Интернете мало шума о нем.

Я пишу простой метод, который извлекает любой заданный тег на основе имени:

public string[] GetTagsByName(string TagName, string Source) {
    ...
}

Это можно легко сделать с помощью регулярных выражений, но все мы знаем, что использование регулярных выражений для синтаксического анализа HTML неправильно. Пока у меня есть следующий код:

...
// TODO: Clear Comments (can this be done or should I use RegEx?)
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(Source);
ArrayList tags = new ArrayList();
string xpath = "//" + TagName;
foreach (HtmlTextNode node in doc.DocumentNode.SelectNodes(xpath) {
    tags.Add(node.Text);
}
return (string[])tags.ToArray(typeof(String));

Я хотел бы сначала удалить все комментарии из HTML, а затем вернуть правильный тег на основе его имени. Если возможно, я также хотел бы вернуть определенные метатеги на основе атрибута, например robot. Я не очень хорошо разбираюсь в xpath, поэтому любая помощь в этом была бы хороша.

Любая помощь приветствуется.


person AlexT    schedule 01.03.2010    source источник
comment
Не забывайте тот факт, что HTML не требует от пользователя наличия элемента <head> или <body>. А HTML-комментарии обычно делаются с помощью <!-- comment -->.   -  person Kolky    schedule 01.03.2010
comment
Мне известно об этом, и я написал несколько основных регулярных выражений для их обработки, но мне было бы гораздо интереснее получить некоторую информацию о том, как это сделать с помощью пакета HTML Agility. Документация для него ужасна!   -  person AlexT    schedule 01.03.2010


Ответы (1)


HtmlDocument HtmlAgilityPack реализует IXpathNavigable, поэтому он использует стандартный механизм .NET XPath. Подойдет любая документация по XPath 1.0, особенно если в ней говорится о System.Xml.XPath.

"//comment()" находит все комментарии
"//meta" находит все элементы "meta"

HtmlDocument был спроектирован так, чтобы выглядеть очень похоже на XmlDocument, поэтому примеры и учебные пособия по этому поводу будут в некоторой степени применимы.

Некоторые ссылки MSDN:

person Lachlan Roche    schedule 02.03.2010