web-dev-qa-db-fra.com

HTML Agility Pack obtient tous les attributs href des ancres sur la page

J'essaie d'ajouter des liens extraits d'un fichier HTML à un CheckBoxList (cbl_items).

Il fonctionne jusqu'à présent, mais au lieu du lien, le nom de l'élément est affiché sous la forme HtmlAgilityPack.HtmlNode. J'ai essayé d'utiliser DocumentElement au lieu de Node mais il a dit qu'il n'existe pas ou similaire.

Comment puis-je obtenir l'URL à afficher au lieu de HtmlAgilityPack.HtmlNode?

Voici ce que j'ai essayé jusqu'à présent:

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);
}
20
user3802921

Vous ajoutez HtmlNodeobjet à CheckBoxList et non la valeur de l'attribut href. Ce que vous voyez est la valeur ToString() de HtmlNode car c'est la meilleure chose que CheckBoxList puisse faire pour afficher cet objet.

À la place, vous pouvez utiliser GetAttributeValue(string attribute, string defaultValue) pour récupérer la valeur de l'attribut href.

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);
}
24
Ryan Emerle