xsl: call-template: возвращает номер, а не текст, который будет присвоен переменной - PullRequest
1 голос
/ 16 ноября 2010

У меня здесь (небольшая) проблема. Я называю именованный шаблон и назначаю результат переменной. Так хорошо, но мне нужно, чтобы тип возвращаемого значения обработанного шаблона был целочисленным, а не текстовым.

Интересно, есть ли способ достичь этого, не используя временную переменную?

Вот пример кода:

<xsl:variable name="tmp">
    <xsl:call-template name="mytemplate">
        <xsl:with-param name="x" select="123"/>
    </xsl:call-template>
</xsl:variable>

<xsl:variable name="myvar" select="number($tmp)"/>

<xsl:template name="mytemplate">
    <xsl:param name="x"/>
    <xsl:value-of select="$x"/>
</xsl:template>

Не обращайте внимания на код, поскольку это упрощение того, что делает мой шаблон. Заметьте также, что я пытался вернуть <xsl:value-of select="number($x)"/>, но безрезультатно.

Любая помощь очень ценится. ТИА

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Как указывает @Alejandro, вам не нужно явное приведение к числу .

Если вы намереваетесь использовать это не как число, а для использования числового представления в качестве промежуточного типа, тогда вам необходимо приведение, потому что RTF, находящийся в переменной $tmp, может быть не преобразован напрямую этот тип как хотел.

Пример :

Вам нужно:

  boolean(number($tmp))

для преобразования RTF или любого дерева в логическое значение tat может иметь два разных значения.

boolean(someNode)

всегда true() - по определению .

1 голос
/ 16 ноября 2010

Во-первых, $tmp тип данных - Фрагмент дерева результатов. Таким образом, кроме копирования, во всех разрешенных операциях с $tmp учитывается только его строковое значение.

В XPath есть много правил для неявного приведения. В общем случае, когда оператор или функция принимает числовой тип данных в качестве аргумента, выражение будет приведено к числу с помощью функции number().

Итог: в большинстве случаев вам не нужно явное приведение.

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