Альтернативы HtmlAgilityPack?

Мне не нравятся некоторые дизайнерские решения, сделанные в HtmlAgilityPack:

  • При использовании SelectNodes, если ни один из узлов не найден, он возвращает null, а не пустой набор, поэтому вы не можете просто foreach над ним без нулевой проверки.
  • При попытке выбрать детей с помощью node.SelectNodes он фактически ищет из корня документа, если вы не используете descendant::, который вообще не является очевидным или ожидаемым, IMO.
  • HtmlDocument.Load не возвращает корень node, который вам нужен в 99% случаев, я думаю

Вы можете не согласиться с этим, конечно, но это не главное. Я ищу что-то другое. Что-то, что ведет себя немного более ожидаемо, или что-то, что использует синтаксис jQuery, будет еще лучше. Предложения?

Ответы

Ответ 1

Запущен проект под названием SharpQuery

В настоящее время поддерживает селектора идентификаторов, классов, тегов и атрибутов.

a
a[href]
a[href^=http://stackoverflow.com]
.class
#id

Обновление: Я не поддерживаю этот проект, извините. CsQuery имеет последние обновления (по состоянию на июль 2013 года), но у меня нет опыта его использования.

Ответ 2

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