функция xpath не распознается в xslt - PullRequest
2 голосов
/ 07 января 2011

Я отлаживаю таблицу стилей xslt в Oxygen с использованием процессора xalan. Я не могу заставить работать функции current-time () или hours-time-). Я получаю ошибку «Не удалось найти функцию». Что я делаю неправильно? вот код

<xsl:variable name="isPm" select="hours-from-time(n1:TIME_REPORT) &gt;= 12"/>

Ответы [ 3 ]

4 голосов
/ 07 января 2011

часы от времени и текущее время - функции XPath 2.0.Xalan поддерживает только XPath 1.0.

Более поздние версии Xalan поддерживают функции расширения, которые предоставляют некоторые из этих функций.Обе функции, которые вы ищете, находятся в той или иной форме.Обратите внимание, что поскольку XPath 1.0 не понимает даты, вы будете иметь дело со строками.Но см., Например:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date">
    <xsl:template match="/">
        <html>
            <head>
                <title>Current Date Test</title>
            </head>
            <body>
                <h1>It's now <xsl:value-of select="date:date-time()"/>.</h1>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

См. Страницу Функция расширения Xalan , а также страницу функции расширения EXSLT для дат и времени .

2 голосов
/ 08 января 2011
I am debugging an xslt stylesheet in Oxygen using the xalan processor. 

Я не могу заставить работать функции current-time () или hours-time-time ().Я получаю сообщение об ошибке «Не удалось найти функцию».

Как отметили @lavinio и @Alejandro, эти две функции были введены в XPath 2.0, который не поддерживается Xalan.

Вы можете передать текущее время в качестве параметра для преобразования XSLT 1.0 .

Обратите внимание , что даже в XPath 2.0 многократные оценки current-time() во время преобразования, вернуть то же значение.Так что эта функция не дает вам ничего, кроме того, что вы получаете, передавая текущее время в качестве параметра.

1 голос
/ 07 января 2011

Это не стандартные функции XPath 1.0. Если в вашем процессоре эти функции реализованы как расширения, вам следует добавить для них правильное пространство имен.

С http://www.w3.org/TR/xslt#section-Extension-Functions

Если FunctionName в FunctionCall выражение не является NCName (т.е. если он содержит двоеточие), то это рассматривается как вызов на добавочный номер функция. FunctionName расширен на имя, используя пространство имен декларации из оценки контекст.

Если процессор XSLT не имеет реализация расширения функция определенного имени доступно, то function-available функция должна вернуть false для этого название. Если такая функция расширения происходит в выражении и функция расширения на самом деле называется, процессор XSLT должен сигнализировать ошибка. XSLT процессор не должен сигнализировать об ошибке только потому, что выражение содержит расширение функция, для которой нет реализации есть в наличии.

Если процессор XSLT имеет реализация расширения функция определенного имени доступно, то function-available функция должна вернуть true для этого название. Если такое расширение называется, тогда процессор XSLT должен вызвать реализация, передающая ему функцию вызвать аргументы; результат, возвращаемый реализация возвращается как результат вызова функции.

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