2014-09-05 8 views
14

Ich versuche, Links aus einer HTML-Datei extrahiert, um eine CheckBoxList (cbl_items).HTML Agility Pack bekomme alle Anker 'href Attribute auf Seite

Es funktioniert so weit, aber anstelle des Links wird der Name des Elements als HtmlAgilityPack.HtmlNode angezeigt. Ich versuchte mit DocumentElement anstelle von Node aber es sagte, dass es nicht existiert oder ähnlich.

Wie kann ich die URL anstelle von HtmlAgilityPack.HtmlNode angezeigt bekommen?

Das ist, was ich bisher versucht habe:

HtmlWeb hw = new HtmlWeb(); 
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc = hw.Load(tb_url.Text); 
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) 
{ 
    cbl_items.Items.Add(link); 
} 

Antwort

16

Sie fügen die HtmlNodeObjekt zum CheckBoxList und nicht den Wert des href Attribut. Was Sie sehen, ist HtmlNode 's ToString() Wert, da das ist das Beste, was die CheckBoxList tun kann, um dieses Objekt anzuzeigen.

Stattdessen können Sie GetAttributeValue(string attribute, string defaultValue) verwenden, um den Wert des Attributs href abzurufen.

HtmlWeb hw = new HtmlWeb(); 
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc = hw.Load(tb_url.Text); 
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) 
{ 
    // Get the value of the HREF attribute 
    string hrefValue = link.GetAttributeValue("href", string.Empty); 
    cbl_items.Items.Add(hrefValue); 
} 
+1

Vergessen Sie nicht zu berücksichtigen, dass 'SelectNodes' (mind-bogglingly)' null' zurückgibt, wenn keine Knoten übereinstimmen. –

Verwandte Themen