Selezione di tutti i nodi contenenti testo con XPath

c# html-agility-pack xpath

Domanda

Ho lottato per risolvere questo problema che sto avendo negli ultimi due giorni. Dite, voglio ottenere tutto il testo () da un documento HTML, tuttavia voglio solo sapere e recuperare l'XPath del nodo che contiene dati di testo. Esempio:

 foreach (var textNode in node.SelectNodes(".//text()")) 
 //do stuff here 

Tuttavia, quando si tratta di recuperare l'XPath del textNode usando textNode.XPath , ottengo l'XPath completo incluso il nodo #text :

/html[1]/body[1]/div[1]/a[1]/#text

Tuttavia, desidero solo il nodo che contiene il testo, ad esempio:

/html[1]/body[1]/div[1]/a[1]

Qualcuno potrebbe indicarmi una soluzione XPath migliore per recuperare tutti i nodi che contengono testo ma recuperare l'XPath fino al nodo contenente?

Risposta accettata

Perché no?

string[] elements = getXPath(textNode).Split(new char[1] { '/' });
return String.Join("/", elements, 0, elements.Length-2);

Risposta popolare

Invece di :

.//text() 

usare :

.//text() 

Questo seleziona tutti gli "elementi foglia" - caratteri del nodo di contesto (corrente) che hanno almeno un figlio di nodo di testo non solo di spazi bianchi.




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é