Htmlagilitypack c как подключить

Использование HTML Agility Pack и CSS Selectors

Введение

В следующих примерах используется HTML Agility Pack (НАР), чтобы загрузить HTML в объект модели документа (DOM) и разбить на узлы. Дополнительно есть случаи, когда приходилось анализировать документ об элементах, которые не являются действительно узлами, такие как комментарии.

В дополнение к наблюдениям около HAP в целом будут указаны методы расширения, предоставляемые пакетом HAP.CSSSelectors, что позволяет значительно проще выбирать.

Задний план

Был успешно использован Html Agility Pack для клиента, проанализированы HTML документы, чтобы извлечь необходимую информацию. Расширения CSSSelector будет добавлять новый мощный уровень абстракции, чтобы собрать необходимые данные.

Использование кода

Пакеты для примера нужно будет импортировать с помощью NuGet. Описания пакетов будут загружены в проекте, но нужно будет установить менеджер пакетов NuGet для восстановления библиотек.

В проект был включен очень простой HTML файл с примерами вопросов, которые необходимы для решения своих проектов.

HtmlAgility имеет ряд классов, доступных для его добавляемых классов и перечисления, которые представляют различные части DOM, эти классы включают HtmlAttribute, HtmlAttributeCollection, HtmlCommentNode и так далее.

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

В исходном коде вызывается каждая секция кода, использующая номенклатуру (часть X), где X представляет собой число.

Чтобы использовать, следующая строка должна быть реализована:

HtmlAgilityPack.agpack = new HtmlAgilityPack.HtmlDocument();

Следующий метод вызывает метод для загрузки документа. Вы можете загрузить его из строки:

//or from a resource –

Файл в себя включает недостающий закрывающийся тег шрифта и неуместный закрывающий тег. Он прекрасно работает в браузере, не выдает ошибку в HAP, но может быть проверенным на это.

READ  Как подключить интернет через модем мтс к компьютеру через

var errors = agpack.ParseErrors;

ParseErrors будет возвращать коллекцию и подсчет ошибок. Достаточно интересная вкладка, закрытие шрифта не выдаст ошибку.

После того, как документ был загружен, двумя основными способами для поиска являются:

SelectNodes( string XPath) // from the DocumentNode

GetElementbyId( string Id) // from the HtmlDocument

Поскольку может быть только один ID, getElementById вернет один узел и SelectNodes вернет коллекцию узлов, потому что с помощью XPath он может соответствовать одному или нескольким элементам.

Находим приложение, где будет добавляться несколько файлов вместе, ограничивающее каждый документ с начальным и конечным комментариями. Ниже показано, как обрабатывать разделения этого документа обратно в его составную часть. Файл, который включен, имеет секцию, которая очерчена с комментариями:

Вы можете использовать следующую команду, чтобы получить комментарий:

var comment = agpack.DocumentNode.SelectNodes( «//comment()[contains(., ‘Start Table:’)]» );

Это говорит от всего документа («//») выбор комментариев, что содержат от текущего местоположения (.) слово Начало табл.

Теперь в html.Value имеется текст между двумя тегами.

Начнем с таблицы ID = «abc»:

var node = agpack.GetElementbyId( «abc» );

Он также будет содержать набор узлов, представляющих DOM структуру таблицы.

Один из подходов к получению узла строк заключается в использовании Linq, чтобы обнаружить их:

var rownodes = node.ChildNodes.Where(w => w.OriginalName == «tr» );

Если проверить подсчет, вы увидите, что у вас есть три строки. Однако, на самом деле существует четыре ряда, первый записанный не будет найден.

Другой подход заключается в использовании SelectNodes на узле, чтобы обнаружить элементы tr.

rownodes = node.SelectNodes( «tr» );

Как насчет node.SelectNodes («/ tr»)? Это ничего не возвращает.

Как насчет node.SelectNodes («// tr»)? Хорошая новость состоит в том, что он нашел недостающую строку вместе со всеми строками (12) в документе.

READ  Как правильно подключить пятирожковую люстру к двойному выключателю

После небольшого углубления нашлись следующие два рабочих решения:

rownodes = node.SelectNodes(node.XPath + «//tr» );

rownodes = node.SelectNodes( «descendant::tr» );

Аналогичным образом мы можем найти все td элементы, используя те же процедуры. Отметим, что для таблицы нужно 3 вернуть двенадцать td элементов, даже если они являются дочерними.

node = agpack.GetElementbyId( «table3» )

nodes = node.SelectNodes( «descendant::td» );

Переходим к HAP.CssSelectors.

Это находится на вершине HtmlAgility пакета и будет на самом деле обеспечивать установку в качестве части пакета NuGet.

Это позволяет выбрать элементы, используя CssSelectors, нежели XPath. Например:

rownodes = agpack.QuerySelectorAll( «#abc tr» );

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

listTDNodes = agpack.QuerySelectorAll( «#table3 td» );

Ниже приведен пример получения только s (три) во втором ряду.

listTDNodes = agpack.QuerySelectorAll( «#table3 tr:nth-child(2) td» );

В дополнение к выбору по идентификатору (#) можно выбрать по классам (.), это гораздо проще, чем искать атрибут с классом, используя XPath.

listTDNodes = agpack.QuerySelectorAll( «.table» );

Возвращаем первую и третью таблицу с классом table.

Точки интереса

Источник

Поделиться с друзьями
admin
Оцените автора
( Пока оценок нет )
Как подключить и установить...
Adblock
detector