xsl number()-функция не может преобразовать

Я использую fop 1.0 в приложении .NET.
Моя таблица стилей выглядит так:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet ... version="1.0" ...>
...
<xsl:param name="fromPerson" select="'1'"/>
<xsl:param name="toPerson" select="'1'"/>
...
<xsl:template match="*[local-name()='Person']">
   <xsl:if test="(position() &gt;= number($fromPerson))>
   ...
   </xsl:if>
</xsl:template>

Проблема в том, что функция number() завершается ошибкой:

Zeilennummer221; Spaltennummer267; #UNKNOWN (cli.System.Int32) kann nicht in eine Zahl
konvertiert werden!
(Position des Fehlers unbekannt)org.apache.fop.fo.ValidationException: "fo:root"
is missing child elements. Required content model: (layout-master-set, declarations?,  
bookmark-tree?, (page-sequence|fox:external-document)+) (Keine Kontextinformationen  
verf³gbar)

Важный:

#UNKNOWN (cli.System.Int32) cannot be converted into an integer

Кстати: я проверил это, распечатав значение с помощью ‹xsl:message>

Есть идеи, почему это вызывает ошибку?


person jahuer1    schedule 31.10.2011    source источник


Ответы (2)


Типы значений, которые можно передать глобальным параметрам таблицы стилей, зависят от API процессора. Я предполагаю, что вы используете процессор, API которого не допускает значений типа cli.System.Int32.

Действительно, типы, принимаемые Microsoft API, перечислены здесь:

http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addparam.aspx

person Michael Kay    schedule 31.10.2011

Я думаю, вам нужен <xsl:variable>, а не <xsl:param>. Параметры являются подэлементами элемента <xsl:template> (или в XSLT 2 элемента <xsl:function>.

person Frank    schedule 31.10.2011
comment
Ты неправ. Param может быть передан xslt извне, если указан как верхний элемент, как здесь. Это возможно в xslt 1.0 и 2.0. - person FailedDev; 31.10.2011
comment
Я этого не знал и думал, что #UNKNOWN содержится в переменной $fromPerson, а не в параметре $fromPerson. - person Frank; 31.10.2011