2016-07-19 15 views
0

Ich habe diesen Code (siehe unten) und möchte die Werte "Day.1" und "Day.2" daraus ableiten.Abrufen von Werten aus dem Klassen-Tag mit HtmlAgilityPack

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml("<div class=\"large-10 columns\"><div class=\"box\"><div class=\"table-header\">Day.1</div></div></div>" + 
      "<div class=\"large-10 columns\"><div class=\"box\"><div class=\"table-header\">Day.2</div></div></div>"); 

var classes = doc.DocumentNode.SelectNodes("//div[@class=\"large-10 columns\"]"); 
foreach (var item in classes) 
{ 
    var str = item.SelectSingleNode("//div[@class=\"box\"]//div[@class=\"table-header\"]"); 
    Output += "Test: " + str.InnerText.Split('.')[1] + "\n"; 
} 

Mit diesem Code der Ausgabe ist:

Test: 1 
Test: 1 

Warum die Variable 'str' ist beiden Male den Wert aus dem ersten 'table-header' Klasse zu bekommen?

+0

, warum Sie nicht gerade für die 'div gehen [@class = \ "table-header \"]' Knoten? – ElenaDBA

+0

Sie verwenden double '//', wenn Sie nur eine einzige '/' – ElenaDBA

+0

benötigen, weil ich nur sie 2 Werte und 'table-header' kann in anderen Teilen in HTML-Code gefunden werden .. – user1693813

Antwort

1

Versuch:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml("<div class=\"large-10 columns\"><div class=\"box\"><div class=\"table-header\">Day.1</div></div></div>" + 
        "<div class=\"large-10 columns\"><div class=\"box\"><div class=\"table-header\">Day.2</div></div></div>"); 

     var classes = doc.DocumentNode.SelectNodes("//div[@class=\"large-10 columns\"]/div[@class=\"box\"]/div[@class=\"table-header\"]"); 
     foreach (var item in classes) 
     { 
      var str = item.InnerText; 
      Output += "Test: " + str.Split('.')[1] + "\n"; 
     } 
Verwandte Themen