Файл не найден с помощью EXSLT

Я пытаюсь начать использовать EXSLT.

Вот мой базовый XSL.

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

    <xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" indent="yes"/>
    <xsl:variable name="main" select="/data"/>

    <xsl:template match="/data">

        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        HTML STARTS
            <br/>
            <xsl:variable name="metadata" select="document('metadata.xml')"/>
            Straight Value of<br/>
            <xsl:value-of select="$metadata"/>          
            Node-set value of <br/>
            <xsl:value-of select="exsl:node-set($metadata)/email"/>


            <xsl:for-each select="$metadata/Data">
                <xsl:variable name="node" select="."/>
                <xsl:value-of select="$node"/>
                Test<br/>


            </xsl:for-each>

        </html>
    </xsl:template>
</xsl:stylesheet>

Я скачал общий модуль с сайта EXSLT. (http://www.exslt.org/exsl/index.html)

Структура этого модуля такова:

base.css
exsl.xsl
/functions/node-set/base.css
/functions/node-set/exsl.node-set.xml
/functions/object-type/base.css
/functions/object-type/exsl.object-type.xml
/elements/document/base.css
/elements/document/exsl.document.xml
(+ some htmls in each folder). 

Я извлекаю его и помещаю в тот же каталог, что и мой базовый XSL, так что exsl.xsl и мой базовый xsl находятся в одной папке.

Exsl.xsl говорит

<?xml version="1.0" encoding="utf-8"?>
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/exsl" version="1.1" extension-element-prefixes="exsl" exsl:doc="http://www.exslt.org/exsl">
   <import href="node-set/exsl.node-set.xsl"/>
   <import href="object-type/exsl.object-type.xsl"/>
</stylesheet>

Теперь это кажется неправильным само по себе, поскольку сначала он не указывает на папку функций. Однако, даже если я добавлю функцию:

   <import href="functions/node-set/exsl.node-set.xsl"/>
   <import href="functions/object-type/exsl.object-type.xsl"/>

Я получаю сообщение об ошибке «Локальный файл не найден» в XMLSpy.

Любая идея, как я могу начать это?


person dwjohnston    schedule 07.10.2013    source источник
comment
Итак, часть проблемы в том, что это xml в папке, а xsl он пытается импортировать...   -  person dwjohnston    schedule 08.10.2013
comment
Какой процессор XSLT вы используете? Да... разница есть.   -  person Kevin Brown    schedule 08.10.2013
comment
Я использую XMLSpy, но в остальном Internet Explorer 8.   -  person dwjohnston    schedule 08.10.2013
comment
›Я использую XMLSpy, который не указывает, какой XSLT-процессор вы используете.   -  person Kevin Brown    schedule 08.10.2013
comment
Как я узнаю? Глядя на эту страницу, en.wikipedia.org/wiki/Category:XSLT_processors я предположил, что у XMLSpy был собственный процессор.   -  person dwjohnston    schedule 08.10.2013
comment
XMLSpy, как и любой другой хороший отладчик XSLT, позволяет вам установить механизм XSLT, который вы хотите использовать... потому что вы должны использовать тот же механизм XSLT при разработке на стороне клиента, что и при развертывании. Это может быть Xalan, Saxon, XSLCompiledtransform, MSXML, .... и этот список можно продолжить.   -  person Kevin Brown    schedule 08.10.2013
comment
Скопировано из их маркетингового освещения: Диалоговое окно «Параметры XSL» позволяет настроить поведение редактора XSLT. XMLSpy включает отмеченный наградами, совместимый со стандартами процессор Altova XSLT для выполнения преобразований XSLT 1.0 и XSLT 2.0 с учетом схемы, а также обеспечивает встроенную поддержку механизма MSXML XSLT. Открытая архитектура XSLT позволяет использовать любой другой внешний процессор XSLT, включая Apache Xalan, Saxon или XT. Это позволяет создать мощный веб-сайт, полностью использующий XSLT 1.0 или 2.0.   -  person Kevin Brown    schedule 08.10.2013
comment
Хорошо - мило, это полезно. Он выбран для встроенного механизма XSLT — также есть примечание «Важно: встроенный механизм XSLT всегда используется для отладки». Не уверен, что это означает для нажатия на представление «браузер» в XMLSpy — считается ли отладкой?   -  person dwjohnston    schedule 08.10.2013
comment
Для надлежащего тестирования следует использовать механизм XSLT, который вы планируете использовать в своем развертывании. И я не так часто использую XMLSpy, но вполне вероятно, что встроенный механизм XSLT используется для профилирования вашего решения. Если он всегда используется для отладки, это даст мне еще одну причину не использовать его.   -  person Kevin Brown    schedule 08.10.2013
comment
Итак, вернемся к переформулированному исходному вопросу: какой механизм XSLT вы собираетесь использовать для своего производственного развертывания?   -  person Kevin Brown    schedule 08.10.2013
comment
Итак, учитывая, что я собираюсь использовать Internet Explorer для запуска этого веб-приложения - я бы?... В нынешнем виде похоже, что я собираюсь использовать MSXSL, который, похоже, работает нормально.   -  person dwjohnston    schedule 08.10.2013
comment
^ В основном у меня были проблемы с пониманием того, как работают расширения XSLT. - XSLT1.0 не работает для того, что я хочу сделать - мне нужно использовать функцию набора узлов. Я понимаю, что и EXSLT, и MSXSL реализуют эту функцию, поэтому вопрос заключался в том, как мне их использовать?   -  person dwjohnston    schedule 08.10.2013
comment
Теперь вы сами ответили на свой вопрос. Ссылка на пространство имен — это все. Они включены. Вам не нужно ничего другого, как пытаться интегрировать XSL в свои собственные.   -  person Kevin Brown    schedule 08.10.2013
comment
Большое спасибо за вашу помощь.   -  person dwjohnston    schedule 08.10.2013
comment
Если у вас есть <xsl:variable name="metadata" select="document('metadata.xml')"/>, то вообще нет необходимости использовать функцию exsl:node-set, так как функция document дает вам набор узлов. Вам нужна функция exsl:node-set только в том случае, если вы создаете фрагмент результирующего дерева, а затем хотите использовать XPath на узлах в результирующем фрагменте дерева, в этом случае exsl:node-set помогает преобразовать фрагмент результирующего дерева в набор узлов, к которому можно применить XPath.   -  person Martin Honnen    schedule 08.10.2013


Ответы (1)


Как указано выше:

Ссылка на пространство имен EXSLT — это все. Они включены.

Если у вас есть <xsl:variable name="metadata" select="document('metadata.xml')"/>, то нет необходимости использовать функцию exsl:node-set вообще, так как функция документа дает вам набор узлов.

person Community    schedule 02.12.2015