Как выбрать все конечные узлы, используя выражение XPath?

Я верю, что это возможно, но не смог понять синтаксис. Что-то вроде этого:

xmlNode.SelectNodes("//*[count(child::*) <= 1]")

но это не правильно.

4 ответа

Решение

Используйте:

//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()">
Другие вопросы по тегам