Seleccionando todos los nodos que contienen texto con XPath

c# html-agility-pack xpath

Pregunta

He estado luchando para resolver este problema que tengo en los últimos días. Digamos que quiero obtener todo el texto () de un documento HTML, sin embargo, solo quiero saber y recuperar la XPath del nodo que contiene datos de texto. Ejemplo:

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

Sin embargo, cuando se trata de recuperar el XPath del textNode usando textNode.XPath , obtengo el XPath completo, incluido el nodo #text :

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

Sin embargo, solo quiero el nodo que contiene el texto, por ejemplo:

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

¿Alguien podría dirigirme hacia una mejor solución XPath para recuperar todos los nodos que contienen texto, pero solo recuperar el XPath hasta el nodo que contiene?

Respuesta aceptada

Porque tu no

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

Respuesta popular

En lugar de

.//text() 

uso :

.//*[normalize-space(text())]

Esto selecciona a todos los "elementos de hoja" -descendientes del nodo de contexto (actual) que tienen al menos un nodo secundario de texto que no es solo para espacios en blanco.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué