0

我尝试学习包,然后我开始并从 xslt 3 规范中复制了工作示例,但我无法使用该包。在我使用的模板中出现错误:找不到包。

我做错了什么?我期望带有名称或 xmlns 声明的东西我唯一更改的是http://example.com/csv-parserhttp://flexibatch.com/fhx-parser及其相关的 xmlns 声明。Flexibatch.com 与 example.com 一样虚构

谢谢你的帮助

4

2 回答 2

1

如果您在 oXygen 中运行 Saxon 9,那么我认为使用包的一个选项是创建并使用 Saxon 配置文件(oXygen 支持使用新文件创建该文件类型 - > Saxon 配置,您可以选择打开部分 [ xsltPackages],然后您可以将name包的 与 asourceLocationexportLocation) 相关联。

然后在扩展 Saxon 选项的转换场景中,您可以指定要使用的 Saxon 配置文件,这样 Saxon 将知道如何找到您的主模块使用的任何包xsl:use-packagehttps://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 中启动转换场景使用上述部分的配置文件进行设置。

于 2019-08-13T16:17:55.317 回答
0

它适用于配置文件,但现在我收到一条错误消息:« 无法应用级联转换。原因:.org.xml.sax.SAXParseException;systemId: 文件:/C:/..../Test-Package.xsl_xslt_cascade; 行号:3;列号:9;序言中不允许的内容。»(第 3 行是 xmlns:xsl=....)

于 2019-08-13T17:38:26.803 回答