Выбор всех узлов, содержащих текст с помощью XPath

c# html-agility-pack xpath

Вопрос

Я изо всех сил пытаюсь решить эту проблему, которую я испытываю за последние пару дней. Скажем, я хочу получить весь текст () из HTML-документа, однако я хочу только знать и извлекать из XPath узла, который содержит текстовые данные. Пример:

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

Однако, когда дело доходит до получения XPath текстовогоNode с помощью textNode.XPath , я получаю полный XPath, включая узел #text :

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

Однако мне нужен только содержащий узел текста, например:

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

Может ли кто-нибудь указать мне на лучшее решение XPath для извлечения всех узлов, содержащих текст, но только получить XPath вплоть до узла?

Принятый ответ

Почему бы вам

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

Популярные ответы

Вместо :

.//text() 

использование :

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

Это выбирает всех «листовых элементов» - потомков контекстного (текущего) узла, у которых есть хотя бы один дочерний текстовый узел, не содержащий пробелы.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow