Расширения exslt.org - PullRequest
       5

Расширения exslt.org

1 голос
/ 26 января 2010

Я пытаюсь использовать расширение exslt в одном из моих преобразований. С этого сайта я получил пример того, как объединить XML-файлы в один.

Я правильно реализовал пространство имен и префикс элемента, но каждый раз, когда я пытаюсь запустить его из командной строки, я получаю следующую ошибку ...

Не удалось найти подходящую функцию с 1 аргументом с именем {http://exslt.org/common}node-set() в переменной step-concat (имя файла и номер строки указаны здесь, бла-бла-бла)

Я понятия не имею, что происходит, потому что я новичок в этом деле. Мой файл xsl

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">

<!-- STEP Files -->
<xsl:variable name="step-output">
    <xsl:for-each select="/index/file">
        <xsl:copy-of select="document(.)" />
    </xsl:for-each>
</xsl:variable>

<!-- STEP Files as one -->
<xsl:variable name="step-concat" select="exsl:node-set($step-output)" />

<!-- Root Template -->
<xsl:template match="/">
    <xsl:element name="foo">
        <xsl:apply-templates select="$step-concat/foo"/>
    </xsl:element>
</xsl:template>

<xsl:template match="foo">
    <xsl:element name="text">
        <xsl:value-of select="bar"/>
    </xsl:element>
</xsl:template>

Что я делаю не так? Я попытался загрузить модуль с exslt.org, но для меня это не имеет никакого смысла ...

Ответы [ 3 ]

3 голосов
/ 27 января 2010

Saxon HE не имеет встроенной функции расширения, в отличие от Saxon PE.

Однако вы можете написать и зарегистрировать свои собственные функции расширения на Processor, чтобы вы могли легко реализовать exsl:node-set: http://www.saxonica.com/documentation/extensibility/integratedfunctions/

Другой альтернативой является использование Saxon B 9.1

.
1 голос
/ 01 марта 2010

Это таблица стилей XSLT 1.0. XSLT 2.0 делает ненужными многие функции расширения EXSLT, такие как «exsl: node-set ()». Вы можете преобразовать это в таблицу стилей XSLT 2.0, которая делает то же самое, изменив «версию» в первой строке на 2.0, и заменить «exsl: node-set ($ step-output)» просто «$ step-output» , Конечно, для XSLT 2.0 потребуется Saxon.

0 голосов
/ 26 января 2010

Материал exslt.org работает только тогда, когда вы регистрируете / добавляете расширения в свой движок XSLT. Поскольку вы ничего не упоминаете о своей платформе, вам будет сложно вам помочь.

...