Есть ли jQuery-подобный CSS/HTML-селектор, который можно использовать в С#?

Мне интересно, есть ли селектор CSS, подобный jQuery, который можно использовать на С#.

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

Ответ 1

Вам обязательно нужно увидеть @jamietre CsQuery. Проверьте его ответ на этот вопрос!

Fizzler и Sharp-Query предоставляют аналогичные функциональность, но проекты, похоже, заброшены.

Ответ 2

Обновление 10/18/2012

CsQuery теперь находится в версии 1.3. Последняя версия включает порт С# анализатора validator.nu HTML5. В результате CsQuery теперь создаст DOM, который использует спецификацию HTML5 для недопустимой обработки разметки и полностью совместим со стандартами.

Оригинальный ответ

Старый вопрос, но новый ответ. Недавно я выпустил версию 1.1 CsQuery, порт jQuery для .NET 4, написанный на С#, над которым я работал около года. Также на NuGet как "CsQuery"

В текущем выпуске реализованы все селектора CSS2 и CSS3, все расширения jQuery и все методы манипуляции JQuery DOM. Он получил обширное тестовое покрытие, включая все тесты из jQuery и sizzle (механизм выбора jQuery CSS). Я также включил некоторые тесты производительности для прямых сравнений с Fizzler; по большей части CsQuery значительно превосходит его. Исключение фактически загружает HTML в первую очередь, где Fizzler быстрее; Я предполагаю, что это потому, что fizzler не создает индекс. Тем не менее, вы получаете это время после первого выбора.

Имеется документация на сайте github, но на базовом уровне она работает следующим образом:

Создать из строки HTML

CQ dom = CQ.Create(htmlString);

Загрузка синхронно из Интернета

CQ dom = CQ.CreateFromUrl("http://www.jquery.com");

Загрузка асинхронно (без блокировки)

CQ.CreateFromUrlAsync("http://www.jquery.com", responseSuccess => {
    Dom = response.Dom;        
}, responseFail => {
    ..
});

Запустить селектор и выполнить jQuery

var childSpans = dom["div > span"];
childSpans.AddClass("myclass");

объект CQ похож на объект jQuery. Указатель свойств, используемый выше, является методом по умолчанию (например, $(...).

Вывод:

string html = dom.Render();

Ответ 3

Для XML вы можете использовать XPath...

Ответ 4

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

Анализатор, связанный выше, позволяет использовать запросы XPath, которые выглядят так, как будто вы ищете.

Сообщите мне, если я неправильно понял.