Parcourir le DOM avec HTML Agility Pack

c# html-agility-pack

Question

Je ne parviens pas à comprendre comment traverser le DOM avec HTML Agility Pack.

Par exemple, disons que je voulais trouver un élément avec id="gbqfsa" .

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(Url);
            var foo = from bar in doc.DocumentNode.DescendantNodes()
                          where bar.Attributes["id"].Value == "gbqfsa"
                          select bar.InnerText;

En ce moment, je fais cela (ci-dessus), mais foo est null . Qu'est-ce que je fais mal?

EDIT: Ceci est la déclaration if j'utilisais. InnerText juste de voir si les éléments InnerText étaient InnerText "Recherche Google"

if (foo.Equals("Google Search"))
            {
                HasSucceeded = 1;
                MessageBox.Show(yay);
            }
            else
            {
                MessageBox.Show("kms");
            }
            return HasSucceeded;

Réponse acceptée

Ce que vous devriez faire est:

var foo = (from bar in doc.DocumentNode.DescendantNodes()
          where bar.GetAttributeValue("id", null) == "gbqfsa"
          select bar.InnerText).FirstOrDefault();

Vous avez oublié FirstOrDefault() pour sélectionner le premier élément FirstOrDefault() à la condition where .

Et je remplace Attributes["id"].Value par GetAttributeValue("id", null) pour ne pas GetAttributeValue("id", null) une exception si un élément possède un attribut id .


Réponse populaire

Je ne pense pas que foo semble null . Plus probablement, bar.Attributes["id"] est nul pour certains des éléments de l’arborescence, car tous les nœuds descendants n’ont pas de propriété "id". Je recommanderais d'utiliser la méthode GetAttributeValue , qui renverra une valeur par défaut si l'attribut n'est pas trouvé.

var foo = from bar in doc.DocumentNode.DescendantNodes()
            where bar.GetAttributeValue("id", null) == "gbqfsa"
            select bar.InnerText;


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow