У меня есть следующая таблица стилей xsl:
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="/">
<xsl:variable name="elements">
<xsl:call-template name="get-some-nodes"/>
</xsl:variable>
<root>
<values>
<xsl:copy-of select="$elements"/>
</values>
<count>
<xsl:value-of select="count($elements)"/>
</count>
</root>
</xsl:template>
<xsl:template name="get-some-nodes">
<node>1</node>
<node>2</node>
<node>3</node>
</xsl:template>
</xsl:stylesheet>
(не имеет значения, к какому xml вы применяете его, он генерирует свои собственные данные).
Результат этого (с использованием xsltproc):
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.w3.org/1999/xhtml" xmlns:set="http://exslt.org/sets">
<values>
<node>1</node>
<node>2</node>
<node>3</node>
</values>
<count>1</count>
</root>
Учитывая, что вызываемый шаблон возвращает три узла, я ожидал, что "count ($ elements)" будет равен 3, но это один. Я подозревал, что, возможно, результаты были обернуты в какой-то корневой узел, но любая попытка сделать подсчет ($ elements / *) или подобное не удалась, я считаю, что $ elements - это фрагмент дерева результатов, а не набор узлов.
У меня нет доступа ни к одной из вкусностей exslt или xslt2.0, наверняка есть способ получить количество узлов, хранящихся в переменной?
Я также был бы рад подсчитать количество узлов, возвращаемых шаблоном вызова, без использования промежуточной переменной, но я не понимаю, как это возможно.