我尝试学习包,然后我开始并从 xslt 3 规范中复制了工作示例,但我无法使用该包。在我使用的模板中出现错误:找不到包。
我做错了什么?我期望带有名称或 xmlns 声明的东西我唯一更改的是http://example.com/csv-parser到http://flexibatch.com/fhx-parser及其相关的 xmlns 声明。Flexibatch.com 与 example.com 一样虚构
谢谢你的帮助
我尝试学习包,然后我开始并从 xslt 3 规范中复制了工作示例,但我无法使用该包。在我使用的模板中出现错误:找不到包。
我做错了什么?我期望带有名称或 xmlns 声明的东西我唯一更改的是http://example.com/csv-parser到http://flexibatch.com/fhx-parser及其相关的 xmlns 声明。Flexibatch.com 与 example.com 一样虚构
谢谢你的帮助
如果您在 oXygen 中运行 Saxon 9,那么我认为使用包的一个选项是创建并使用 Saxon 配置文件(oXygen 支持使用新文件创建该文件类型 - > Saxon 配置,您可以选择打开部分 [ xsltPackages],然后您可以将name
包的 与 asourceLocation
或exportLocation
) 相关联。
然后在扩展 Saxon 选项的转换场景中,您可以指定要使用的 Saxon 配置文件,这样 Saxon 将知道如何找到您的主模块使用的任何包xsl:use-package
(https://www.w3.org/TR/xslt- 30/#element-use-package ) 因为它可以将那里给出的 URI/名称与包位置相关联。
这是一个有点复杂的设置,也许为 oXygen 添加一个标签,以便他们的支持人员看到您的问题,并可以告诉您更多或更简单的选项。
Saxon 配置文件中的一个示例部分,用于直接使用 XSLT 3 测试套件中的包是
<xsltPackages>
<package name="http://example.com/csv-parser" version="1.0"
sourceLocation="https://github.com/w3c/xslt30-test/raw/master/tests/decl/package/package-100.xsl"/>
</xsltPackages>
当然,如果您有本地文件,则可以调整源位置,如果您按照问题建议这样做,则需要调整名称。
使用该包的 XSLT 代码可在https://github.com/w3c/xslt30-test/blob/master/tests/decl/package/package-100a.xsl在线查看(或可执行/可在https://下载github.com/w3c/xslt30-test/raw/master/tests/decl/package/package-100a.xsl)并且是
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:csv="http://example.com/csv"
exclude-result-prefixes="xs csv" version="3.0">
<xsl:output indent="yes"/>
<!-- example input "file" -->
<xsl:variable name="input" as="xs:string"
>name,id,postal code
"Abel Braaksma",34291,1210 KA
"Anders Berglund",473892,9843 ZD</xsl:variable>
<!-- entry point -->
<xsl:template name="xsl:initial-template">
<xsl:copy-of select="csv:parse($input)"/>
</xsl:template>
<xsl:use-package name="http://example.com/csv-parser" package-version="*"/>
</xsl:stylesheet>
因此,您可以使用直接从https://github.com/w3c/xslt30-test/raw/master/tests/decl/package/package-100a.xsl和 Saxon 9 特定链接的 XSLT 代码在 oXygen 中启动转换场景使用上述部分的配置文件进行设置。
它适用于配置文件,但现在我收到一条错误消息:« 无法应用级联转换。原因:.org.xml.sax.SAXParseException;systemId: 文件:/C:/..../Test-Package.xsl_xslt_cascade; 行号:3;列号:9;序言中不允许的内容。»(第 3 行是 xmlns:xsl=....)