java - 如何在 saxon 9.7+ s9api 中使用打包(导出)的样式表?

标签 java saxon

从 Saxon 9.7 开始,我们必须使用不同的 s9api 过程来“导入”打包的样式表。 Here ,Michael 说“样式表包可以...导入...使用...s9api API。”然后他提到these详细信息。

当我阅读它时,希望它会很简单,我锁定了这一点:

A stylesheet export file ... is accepted by any Saxon interface that accepts a source stylesheet.

因此,我创建了这个 MCV 示例:

import java.io.*;
import net.sf.saxon.Configuration;
import net.sf.saxon.s9api.Processor;
import net.sf.saxon.s9api.XsltCompiler;
import net.sf.saxon.s9api.XsltExecutable;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
public class test {
    public static void main (String args[]) throws Exception {
        Processor saxProc = new Processor(false);
        Configuration saxCfg = saxProc.getUnderlyingConfiguration();
        XsltCompiler saxComp = saxProc.newXsltCompiler();
        File xslmain = new File(args[0]);
        Source xsl = new StreamSource(xslmain);
        XsltExecutable saxExe = saxComp.compile(xsl);
    }
}

像这样执行(对 ee、pe 和 he 使用 9.9.1.7J)不会引发异常:

$ javac -classpath saxon9pe.jar test.java
$ java -classpath .:saxon9he.jar test something.xsl

但是如果我打包something.xsl(即使用EE将其导出到xml文件)并像这样执行MCV,则会抛出异常:

$ java -classpath .:saxon9he.jar test something-exported.xml
Error
  SXPK0002: Cannot load expression with tag indexedFilter2. The stylesheet uses Saxon-EE features
Exception in thread "main" net.sf.saxon.s9api.SaxonApiException: Cannot load expression with tag indexedFilter2. The stylesheet uses Saxon-EE features

我是否应该能够使用 EE 打包 xsl 文件,分发 HE,并使用 HE 读取打包的样式表来执行转换?如果是,怎么办?

最佳答案

尝试使用-target:HE编译它。原则上,这应该会阻止 Saxon-EE 生成 HE 运行时无法识别的结构。

但我不得不说,这还没有经过非常彻底的测试。可能还需要使用 -opt 选项禁用选定的优化。

关于java - 如何在 saxon 9.7+ s9api 中使用打包(导出)的样式表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60838463/

相关文章:

Java Multimap 具有自然排序的键,但集合按添加元素的顺序排序

java - 函数 result-document() 使文件保持打开状态

xslt - XSLT 2.0 中的尾递归函数不起作用

java - JAXP 撒克逊-he : XMLfile StreamSource doesn't release file access after parsing error

java - Java 中的撒克逊语 : Specify SAX Parser

java - SDK 管理器没有找到 java

java - 在 System.out 上同步

java - 迭代器迭代器 (Java) 中的整数序列

java - 从应用注册中列出 Azure 存储帐户容器时,受众验证失败

visual-studio - 在 Visual Studio 中使用 Saxon .NET XSLT 处理器不适用于智能感知