XPath in VB.NET con HTML Agility pack

html-agility-pack vb.net xpath

Domanda

Ho il seguente codice vb.net che funziona bene e nella finestra del messaggio vedo il numero esatto di elementi che hanno un attributo id.

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

ora il problema è quando io uso il seguente nella finestra del messaggio che mi dà il riferimento all'oggetto non impostato su un'istanza di un oggetto anche se ci sono 6 elemnti con l'id rso

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

c'è qualche cosa che non va nel secondo frammento?

Risposta accettata

Dopo aver letto un'altra delle tue domande su SO, sembra che tu stia tentando di analizzare google shopping e di aver trascurato di controllare l'origine html scaricata, piuttosto che la dom generata.

L'ID "rso" non appare nel sorgente html, motivo per cui stai ricevendo l'errore. Google non è entusiasta di essere raschiato e certamente lo rende difficile.

Per vedere cosa intendo, puoi aggiungere una casella di testo multilinea al tuo modulo e aggiungerla al posto del tuo attuale codice xpath:

TextBox1.Text = htmldoc.DocumentNode.OuterHtml

Abbastanza non lo è !!


Risposta popolare

Per approfondire la verifica del caso:

Provare:

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

Per afferrare qualsiasi nodo uguale a qualsiasi combinazione di caso di 'rso'



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché