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

问题描述 投票:0回答:1

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

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

样式表导出文件...被任何接受源样式表的Saxon接口接受。

所以,我创建了这个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读取打包的样式表以执行转换吗?如果是,如何?

java saxon
1个回答
1
投票

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

不过,我还没有对此进行全面的测试。也可能需要使用-opt选项禁用选定的优化。

© www.soinside.com 2019 - 2024. All rights reserved.