Как выбрать все конечные узлы, используя выражение XPath?
Я верю, что это возможно, но не смог понять синтаксис. Что-то вроде этого:
xmlNode.SelectNodes("//*[count(child::*) <= 1]")
но это не правильно.
4 ответа
Используйте:
//node()[not(node())]
В случае, когда требуются только листовые узлы элементов (и это требует пояснения - считаются ли элементы, у которых неэлементные дочерние элементы, листовыми узлами?), Тогда следующее выражение XPath выбирает их:
//*[not(*)]
Оба приведенных выше выражения, вероятно, являются самыми короткими, которые выбирают нужные узлы (любой узел или элемент - конечные узлы).
Почему меньше или равно 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()">