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;
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.
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;