Фрагменты дерева результатов, такие как переменная valid_pages
, можно преобразовать в набор узлов, применяя зависимую от процессора функцию.Процессорам XSLT 2.0, таким как Saxon9he, это не понадобится, поскольку в 2.0 RTF автоматически интерпретируются как наборы узлов, но для процессоров XSLT 1.0, таких как MSXML 6.0, которые вы, похоже, используете, будет работать следующее:
<xsl:value-of select="count(msxsl:node-set($valid_pages))" />
Еще одна известная мне функция RTF to nodeset - xalan:nodeset()
для Xalan-J или -C.
Не забудьте включить объявление пространства имен в корневой элемент таблицы стилей:
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
или
xmlns:xalan="http://xml.apache.org/xalan"
Кстати, объявление переменной valid_pages
неверно;не смотря на значимость и полезность вообще, это должно быть написано по крайней мере, включая xsl:choose
следующим образом:
<xsl:variable name="valid_pages">
<xsl:choose>
<xsl:when test="count(/pages/page) < 2">
<xsl:value-of select="/pages/page[0]" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/pages/page[position() > 2]" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>