2016-04-19 3 views
1

Ich versuche, alle divs zu erhalten, die ihre Klasse ein bestimmtes Wort enthält:C# html Agilität Pack erhalten Elemente von Klassennamen

<div class="hello mike">content1</div> 
<div class="hello jeff>content2</div> 
<div class="john">content3</div> 

Ich brauche alle divs zu erhalten, die ihre Klasse enthält das Wort " Hallo". Etwas wie folgt aus:

resultContent.DocumentNode.SelectNodes("//div[@class='hello']")) 

wie kann ich tun es mit Agilität Pack?

Antwort

3

Ich bin sicher, da es mehrere Klassen in Ihrem div gibt, funktioniert das nicht. Sie können versuchen, diese stattdessen:

resultContent.DocumentNode.Descendants("div").Where(d => d.Attributes["class"].Value.Contains("hello")); 
+2

hat auch einen Nachteil zu vermeiden, da auf die andere Antwort entgegengesetzt: es löst eine Ausnahme aus, wenn es ein div ohne 'CLASS'. Benutze stattdessen: '.Where (d => d.GetAttributeValue (" class "," "). Enthält (" hallo "));' –

4

Ich habe es:

resultContent.DocumentNode.SelectNodes("//div[contains(@class, 'hello')]")) 
-1
HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.Load(filePath); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//div[@class='hello']") 
{ 
    //code 
} 
+1

Funktioniert nicht. OP versucht, alll divs zu finden, in denen die Klasse _ ein Wort als Teilzeichenfolge enthält, z. B. "Hallo". Du wählst nur Divs aus, bei denen die Klasse ** hallo ist –

1

wie Sie angegeben haben, dass die Klasse ein bestimmtes Wort enthalten muss, wird Folgendes sicherzustellen, dass das Wort:

  • oder in dem m

    • am Anfang des Strings und gefolgt von einem Leerzeichen iddle der Saite und umgeben von Leerzeichen
    • oder am Ende der Kette und voran von einem Leerzeichen
    • oder nur Klassennamen in der Klasse Attribut

    Er tut dies, indem sie den Wert der Vergleichs Klassenattribut umgeben von Leerzeichen mit dem angegebenen Wort (hello) umgeben von Leerzeichen. Dies ist auf Fehlalarme wie class="something-hello-something"

    resultContent.DocumentNode.SelectNodes("//div[contains(concat(' ', @class, ' '), ' hello ')]");