Подтвердить что ты не робот

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

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

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

но это неверно.

4b9b3361

Ответ 1

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

//node()[not(node())]

В случае, если требуются только узлы листового элемента (и для этого требуется уточнение - это элементы, которые имеют неэлементные дочерние элементы, рассматриваемые как листовые узлы?), тогда выбирается следующее выражение XPath:

//*[not(*)]

Оба вышеприведенных выражения, вероятно, являются самыми короткими, которые выбирают нужные узлы (любые - node или элементы - листовые узлы).

Ответ 2

Любые элементы без дочернего элемента

//*[not(child::*)]

Ответ 4

Я добавляю этот ответ XSLT, так как кажется, что передние матчи google не имеют такого решения:

После долгой борьбы с извлечением CDATA в качестве XML, в конечном итоге это выражение работало лучше всего для меня:

<xsl:template match="*[not(child::*)]/text()">