Я пытаюсь начать использовать 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.
Любая идея, как я могу начать это?
<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