Подсчет конечных точек в XML с использованием XSL - PullRequest
3 голосов
/ 31 марта 2010

Я хочу иметь возможность подсчитывать "конечные точки" в файле XML с использованием XSL. Под конечной точкой я подразумеваю теги без дочерних элементов, которые содержат данные.

т.е.

<xmlsnippet> 
    <tag1>NOTENOUGHDAYS</tag1> 
    <tag2>INVALIDINPUTS</tag2> 
    <tag3> 
        <tag4> 
            <tag5>2</tag5> 
            <tag6>1</tag6> 
        </tag4> 
    </tag3> 
</xmlsnippet> 

Этот XML должен возвращать 4, поскольку есть 4 "конечных точки"

Ответы [ 3 ]

6 голосов
/ 31 марта 2010
<xsl:template match="/>
  <xsl:value-of select="count(//*[not(*) and normalize-space() != ''])" />
</xsl:template>

Это рекурсивно обрабатывает все дерево XML по оси потомков (//), просматривает все узлы элементов (*), которые не имеют дочерних узлов (not(*)) и содержат данные, отличные от пробелов (normalize-space() != '') ).

Полученный набор узлов считается (и возвращает 4 в вашем случае).

3 голосов
/ 31 марта 2010

*[not(*)] используется для элементов, которые не имеют дочерних элементов.

edit: для подсчета просто используйте count(elements)

2 голосов
/ 31 марта 2010

Попробуйте: -

 <xsl:variable name="numOfLeafNodes" select="count(//*[not(*)])" />

это скажет вам, сколько листовых узлов найдено во всем преобразуемом XML. Использование: -

 <xsl:variable name="numOfLeafNodes" select="count(.//*[not(*)])" />

чтобы найти количество листовых узлов, которые являются потомками текущего узла контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...