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

StackOverflow https://stackoverflow.com/questions/3926589

  •  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()">
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top