C # HtmlAgilityPack добавляет тём

c# html html-agility-pack xpath

Вопрос

C # HtmlAgilityPack добавляет элемент tbody после функции LoadHtml в дерево DOM в таблицах, даже если он не существует в исходном HTML-документе. Как я могу отключить это?

Мой алгоритм создает некоторые выражения XPATH, пересекая дерево dom и не существующий элемент tbody внутри исходного документа делает SelectNodes не нахождением нужных элементов. Принял у меня много времени, чтобы понять это: |

Можно ли сделать SelectNodes также рассмотреть узлы, добавленные HtmlAgilityPack?

Пример:

<table>
    <tr><td>data</td></tr>
</table>

Мое приложение создало бы этот XPATH для извлечения «данных»: // table / tbody / tr / td

Тег tbody в выражении был добавлен, потому что его в дереве DOM после разбора html-кода HtmlAgilityPack, поскольку HtmlAgilityPack добавил его, даже если он не существует. Из-за этого

doc.DocumentNode.SelectNodes("//table/tbody/tr/td");

потерпит неудачу.

Другими словами, родительское имя тега tr element (HtmlElement) равно «TBODY», а не «TABLE». Также я разбираю много разных веб-сайтов, так что это одна ситуация.

SelectNodes выполняет поиск в исходном HTML-коде, а не по дереву DOM, которое оно имеет после HtmlDocument.LoadHtml, или не считает добавленные им «виртуальные» элементы.

Популярные ответы

Вам не нужно использовать полную иерархию.

Просто используйте следующее, если все, что вы хотите, это td s:

doc.DocumentNode.SelectNodes("//table//td");

или просто игнорировать узел tbody и получить всю необходимую вам иерархию:

doc.DocumentNode.SelectNodes("//table//tr/td");


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow