Trova il div genitore di un testo specifico in un HTMLDocument

.net html-agility-pack

Domanda

Vorrei restituire l'InnerText completo di un div in cui è contenuto un testo specifico.

Ad esempio: sto cercando "Hello World" nel documento HTML (HTMLAgilityPack) e voglio restituire l'InnerText completo del div in cui è stato trovato "Hello World".

Questo è quello che ho provato:

HtmlNode textNode = doc.DocumentNode.SelectNodes("//text()[contains(., 'hello world')]/..")

Questo ha restituito il codice Html in cui è stato trovato il testo specifico.

Ora voglio ottenere il primo div genitore del textNode per restituire l'InnerText completo.

Grazie in anticipo

Risposta accettata

Questo lo farei credo ...

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

E questa è probabilmente una soluzione ancora migliore:

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

o usare la notazione Linq-to-XML:

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

O

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

Risposta popolare

Anche se non ho esperienza con HTMLAgilityPack, questo sembra sintassi XPath. Nel qual caso il ".." dovrebbe restituire il genitore dell'elemento trovato.

Ho usato questo sito per testare questo: http://ponderer.org/download/xpath/

Se digiti

//li[contains(., 'about')]/../..

nella casella di testo evidenzierà il div contenente l'elemento ul (che contiene l'elemento li) in verde.

E 'questo quello che stavi cercando?




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é