Как выбрать все узлы листьев, используя выражение XPath?
-
30-09-2019 - |
Вопрос
Я считаю, что это возможно, но не смог выяснить синтаксис. Что-то вроде этого:
xmlNode.SelectNodes("//*[count(child::*) <= 1]")
Но это не правильно.
Решение
Использовать:
//node()[not(node())]
Только в случае элемент Узлы листьев нужны (и это требует разъяснений-элементы, которые не элементы рассматривают узлы листьев?), Тогда следующее выражение XPath выбирает их:
//*[not(*)]
Оба выражения выше, вероятно, самые короткие которые выбирают желаемые узлы (либо узлы, или элемент-листовые узлы).
Другие советы
Любые элементы без элемента ребенка
//*[not(child::*)]
Почему меньше или равен до 1?
xmlNode.SelectNodes("//*[count(child::*) = 0]")
Сделайте тесты и т. Д. На этом сайте http://www.whitebeam.org/library/guide/technotes/xpathtestbed.rhtm
Довольно полезно ..
Я добавляю этот ответ XSLT, так как кажется, что передние матчи Google не хватает такого решения:
После долгой борьбы с извлечением CDATA как XML, в конце концов, это выражение лучше всего сработало для меня:
<xsl:template match="*[not(child::*)]/text()">