XPath in VB.NET mit HTML-Agility-Paket

html-agility-pack vb.net xpath

Frage

Ich habe den folgenden vb.net-Code, der gut funktioniert und im Message-Box sehe ich die genaue Anzahl der Elemente, die ein ID-Attribut haben.

Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id]")
 MsgBox(hreftext.Count)

jetzt ist das Problem, wenn ich das folgende auf dem Nachrichtenkasten verwende, gibt es mir Objektreferenz, die nicht auf eine Instanz eines Gegenstandes eingestellt wird, obwohl es 6 Elemente mit der Identifikation rso gibt

Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id='rso']")
 MsgBox(hreftext.Count)

stimmt irgendetwas mit dem zweiten Ausschnitt nicht?

Akzeptierte Antwort

Nachdem Sie eine andere Ihrer SO-Fragen gelesen haben, scheint es, dass Sie versuchen, Google Shopping zu kratzen, und es versäumt haben, die heruntergeladene HTML-Quelle zu überprüfen, anstatt das generierte Dom.

Die ID "rso" erscheint nicht in der HTML-Quelle, weshalb Sie den Fehler erhalten. Google ist nicht scharf darauf, geschabt zu werden, und macht es sicherlich schwierig.

Um zu sehen, was ich meine, können Sie Ihrem Formular ein mehrzeiliges Textfeld hinzufügen und dieses anstelle Ihres aktuellen xpath-Codes hinzufügen:

TextBox1.Text = htmldoc.DocumentNode.OuterHtml

Hübsch ist es nicht !!


Beliebte Antwort

Um den Fall genauer zu untersuchen:

Versuchen:

Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[translate(@id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='rso']")
 MsgBox(hreftext.Count)

Um einen beliebigen Knoten zu erhalten, der einer beliebigen Fallkombination von 'rso' entspricht



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