HtmlAgilityPack C # --- Selectnodes Restituisce sempre un valore Null

c# html-agility-pack html-parsing xpath

Domanda

Questo è il testo xpath che ho provato ad usare insieme al parser HtmlAgilityPack C #.

//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']

Ho provato a valutare l'espressione xpath con firefox xpath add = on e ho ottenuto con successo gli elementi richiesti. Ma il codice c # restituisce un'eccezione Null.

//div[@id = 'sc1']/table/tbody/tr/td/span[@class='blacktxt']

il nodo contiene sempre un valore nullo ... Per favore aiutami a trovare il modo di aggirare questo problema ... Grazie ...

Risposta popolare

DOM richiede <tbody/> da inserire

Tutte le estensioni del browser più comuni per la creazione di espressioni XPath funzionano sul DOM. A differenza delle specifiche HTML, le specifiche DOM richiedono che gli elementi <tr/> siano all'interno degli elementi <tbody/> , quindi i browser aggiungono tali elementi se mancanti. Puoi facilmente vedere la differenza se osservi il codice sorgente HTML usando Firebug (o strumenti di sviluppo simili che lavorano sul DOM) rispetto alla visualizzazione del sorgente della pagina (usando wget o strumenti simili che non interpretano nulla se necessario).

La soluzione

Rimuovi il passaggio dell'asse /tbody e probabilmente l'espressione XPath funzionerà.

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']

Se hai bisogno di supportare sia HTML con e senza <tbody/>

Per una soluzione più generale, è possibile sostituire il passo dell'asse /tbody con un passaggio decendente-o-self // , ma questo potrebbe passare a "tabelle interne":

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']

Meglio sarebbe usare espressioni XPath alternative:

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']

Una soluzione XPath 2.0 più pulita sarebbe solo

//div[@id = 'sc1']/table/tr/td/span[@class='blacktxt']



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é