Durchlaufen des DOM mit HTML Agility Pack

c# html-agility-pack

Frage

Ich habe Probleme herauszufinden, wie ich das DOM mit HTML Agility Pack durchquere.

id="gbqfsa" wir zum Beispiel an, ich wollte ein Element mit 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;

Im Moment mache ich das (oben), aber foo kommt als null raus. Was mache ich falsch?

EDIT: Dies ist die if Anweisung, die ich verwendet habe. Ich habe gerade getestet, ob die Elemente InnerText der "Google-Suche" entsprechen.

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

Akzeptierte Antwort

Was Sie tun sollten, ist:

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

Sie haben FirstOrDefault() vergessen, um das erste Element auszuwählen, das die Bedingung in where erfüllt.

Und ich ersetze Attributes["id"].Value von GetAttributeValue("id", null) keine Ausnahme GetAttributeValue("id", null) wenn ein Element ein id Attribut hat.


Beliebte Antwort

Ich glaube nicht, dass foo als null . Wahrscheinlicher ist, dass bar.Attributes["id"] für einige der Elemente im Baum null ist, da nicht alle untergeordneten Knoten eine "id" bar.Attributes["id"] haben. Ich würde empfehlen, die GetAttributeValue Methode zu verwenden, die einen Standardwert GetAttributeValue , wenn das Attribut nicht gefunden wird.

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


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