HtmlAgilityPack, используя XPath, содержит метод и предикаты

contains html-agility-pack xpath

Вопрос

HtmlAgilityPack, используя XPath, содержит метод

Я использую HtmlAgilityPack, и мне нужно знать, содержит ли атрибут класса определенное слово, теперь у меня есть эта страница:

<div class="yom-mod yom-art-content "><div class="bd">
<p class="first"> ....................
  </p>
</div>
</div>

Я делаю это:

HtmlDocument doc2 = ...;
List<string> paragraphs = doc2.DocumentNode.SelectNodes("//div[@class = 'yom-mod yom-art-content ']//p").Select(paragraphNode => paragraphNode.InnerHtml).ToList();

Но это слишком специфично, что мне нужно что-то вроде этого:

List<string> paragraphs = doc2.DocumentNode.SelectNodes("//div[contains(@class, 'yom-art-content']//p").Select(paragraphNode => paragraphNode.InnerHtml).ToList();

Но это не работает, пожалуйста, помогите мне ..

Принятый ответ

Возможно, проблема в том, что вам не хватает закрывающей круглой скобки функции contains ():

//div[contains(@class, 'yom-art-content']//p
                                        v
//div[contains(@class, 'yom-art-content')]//p


List<string> paragraphs = 
        doc2.DocumentNode.SelectNodes("//div[contains(@class, 'yom-art-content')]//p")
            .Select(paragraphNode => paragraphNode.InnerHtml).ToList();

Как общее предложение, пожалуйста, объясните, что вы имеете в виду, когда говорите такие вещи, как «это не сработало». Я подозреваю, что вы получаете сообщение об ошибке, которое может помочь выявить проблему?


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

Вместо использования HAP для этого загляните в CsQuery, который предоставляет селектора стиля jQuery.

Это выглядит особенно подходящим для того, что вы пытаетесь сделать.

CsQuery - это порт jQuery для .NET 4. Он реализует все селекторы CSS2 и CSS3, все методы манипуляции DOM для jQuery и некоторые из методов утилиты. Большая часть набора тестов jQuery (начиная с 1.6.2) была перенесена на C #.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему