C # HTML Agility Pack (nicht / falsch), das über die Knotensammlung iteriert

c# collections foreach html-agility-pack

Frage

Ich verwende HTML Agility Pack, um URLs von einer Webseite abzurufen. Die URL ist:

http://goo.gl/DqfQl

Wenn ich den folgenden Code benutze, erhalte ich die Links, die ich möchte:

String html = getHtml("http://goo.gl/DqfQl");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(html);

HtmlNodeCollection address_rows = doc.DocumentNode.SelectNodes("//div[@class='name']/a"); 

foreach (HtmlNode row in address_rows)
{
    MessageBox.Show(row.GetAttributeValue("href",LINK_NOT_FOUND));
}

Aber wenn ich die HtmlNodeCollection , um das contating div mit class="row' zu holen und die URL abzurufen, bekomme ich immer die erste URL.

HtmlNodeCollection address_rows = doc.DocumentNode.SelectNodes("//div[@class='row']"); 

foreach (HtmlNode element in address_rows) {
    MessageBox.Show(element.SelectSingleNode("//div[@class='name']/a").GetAttributeValue("href",LINK_NOT_FOUND));
}   

Ich habe ein bisschen mit diesem Code gespielt und eine Weile dachte ich, ich würde arbeiten. Aber jetzt kann ich nicht das zweite Code-Snippet verwenden, um alle gewünschten URLs auszuwählen. Kannst du helfen?

Akzeptierte Antwort

Sie müssen einen Punkt hinzufügen "." zu dem XPath, sonst wird es vom Anfang des Dokuments und nicht innerhalb des Knotens übereinstimmen.

Ändern Sie einfach Ihre zweite Zeichenfolge in ".//div[@class='name']/a" und es sollte funktionieren



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