HtmlAgilityPack, das XPath verwendet, enthält Methoden und Prädikate

contains html-agility-pack xpath

Frage

HtmlAgilityPack, das XPath verwendet, enthält Methode

Ich benutze HtmlAgilityPack und ich muss wissen, ob ein Klassenattribut ein bestimmtes Wort enthält, jetzt habe ich diese Seite:

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

Ich mache das:

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

Aber es ist zu sehr spezifisch, was ich brauche, ist etwa so:

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

Aber es funktioniert nicht, bitte hilf mir ..

Akzeptierte Antwort

Vielleicht besteht das Problem einfach darin, dass Ihnen die schließende Klammer der Funktion contains () fehlt:

//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();

Als generellen Vorschlag, bitte erläutern Sie, was Sie meinen, wenn Sie Dinge sagen wie "es hat nicht funktioniert". Ich vermute, dass Sie eine Fehlermeldung erhalten, die das Problem aufspüren könnte?


Beliebte Antwort

Anstatt die HAP dafür zu verwenden, sehen Sie sich CsQuery an , die jQuery-Stil-Selektoren bereitstellt.

Es sieht besonders gut für das aus, was Sie tun möchten.

CsQuery ist ein jQuery-Port für .NET 4. Es implementiert alle CSS2- und CSS3-Selektoren, alle DOM-Bearbeitungsmethoden von jQuery und einige der Hilfsmethoden. Der Großteil der jQuery-Testsuite (ab 1.6.2) wurde nach C # portiert.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum