HtmlAgilityPack, en utilisant XPath contient la méthode et les prédicats

contains html-agility-pack xpath

Question

HtmlAgilityPack, en utilisant XPath contient la méthode

J'utilise HtmlAgilityPack et j'ai besoin de savoir si un attribut de classe contient un mot spécifique, maintenant j'ai cette page:

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

Je fais ça:

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

Mais c'est trop spécifique, il me faut quelque chose comme ça:

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

Mais ça ne marche pas, aidez-moi s'il vous plaît ..

Réponse acceptée

Peut-être que le problème est simplement que vous manquez la parenthèse fermante de la fonction 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();

En tant que suggestion générale, veuillez expliquer ce que vous voulez dire lorsque vous dites des choses comme "ça n'a pas fonctionné". Je soupçonne que vous recevez un message d'erreur qui pourrait aider à dépister le problème?


Réponse populaire

Au lieu d'utiliser le protocole HAP pour cela, examinez CsQuery qui fournit des sélecteurs de style jQuery.

Cela semble particulièrement adapté à ce que vous essayez de faire.

CsQuery est un port jQuery pour .NET 4. Il implémente tous les sélecteurs CSS2 et CSS3, toutes les méthodes de manipulation DOM de jQuery et certaines des méthodes utilitaires. La majorité de la suite de tests jQuery (à partir de la version 1.6.2) a été portée en C #.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi