Захват типа rel и href ссылок в c # - PullRequest
3 голосов
/ 18 июня 2009

У меня есть строка, которая должна содержать список элементов в форме, {0}, {1} и {2} являются строками, и я хочу в основном извлечь их.

Я хочу сделать это для решения проблемы синтаксического анализа html, и я слышал, что синтаксический анализ html с регулярными выражениями - это плохо. (Вроде здесь )

Я даже не уверен, как это сделать с помощью регулярных выражений.

Это насколько я получил

string format = "<link rel=\".*\" type=\".*\" href=\".*\">";
Regex reg = new Regex(format);
MatchCollection matches = reg.Matches(input, 0);
foreach (Match match in matches)
 {
        string rel = string.Empty;
        string type = string.Empty;
        string href = string.Empty;
        //not sure what to do here to get these values for each from the match
 }

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

Как бы вы сделали это с помощью выбранного мной метода или с помощью парсера HTML?

Ответы [ 2 ]

1 голос
/ 18 июня 2009

анализирует ваш HTML с помощью библиотеки пакетов Agility HTML, которую можно найти здесь

0 голосов
/ 18 июня 2009

Вам лучше использовать настоящий HTML-парсер, такой как Html Agility Pack. Вы можете получить это здесь .

Основная причина неиспользования регулярных выражений для разбора HTML заключается в том, что он может быть некорректно сформирован (почти всегда), что может нарушить работу вашего синтаксического анализатора регулярного выражения.

Затем вы использовали бы XPath, чтобы получить нужные вам узлы и загрузить их в переменные.

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(pageMarkup);
HtmlNodeCollection nodes = htmlDoc.DocumentNode.SelectNodes("//link");
string rel;

if(nodes[0].Attributes["rel"] != null)
{
    rel = nodes[0].Attributes["rel"]; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...