You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Saxon EE处理器XSLT-2.0样式表编译报错求助

Saxon EE XSLT 2.0编译错误排查

核心问题分析

当前报错仅提示"样式表编译期间报告错误",但未给出具体错误细节,这是排查的关键障碍。Saxon在编译XSLT时会生成详细的错误信息(如语法错误、扩展函数问题、特性兼容性问题等),需要先获取这些信息才能精准定位问题。

具体排查步骤

1. 获取详细编译错误信息

修改Java代码,添加自定义ErrorListener来捕获并打印所有编译阶段的错误和警告:

ProfessionalTransformerFactory tFactory = new ProfessionalTransformerFactory();

// 添加错误监听器
tFactory.setErrorListener(new ErrorListener() {
    @Override
    public void warning(TransformerException exception) throws TransformerException {
        System.err.println("编译警告: " + exception.getMessage());
        exception.printStackTrace();
    }

    @Override
    public void error(TransformerException exception) throws TransformerException {
        System.err.println("编译错误: " + exception.getMessage());
        exception.printStackTrace();
    }

    @Override
    public void fatalError(TransformerException exception) throws TransformerException {
        System.err.println("致命编译错误: " + exception.getMessage());
        exception.printStackTrace();
    }
});

// 原有的配置代码
Configuration saxonConfig = tFactory.getConfiguration();
JavaExtensionLibrary javaLib = new JavaExtensionLibrary( (ProfessionalConfiguration) saxonConfig );
javaLib.declareJavaClass( "http://com.teamcenter.rac.cme.cmereport/CMEReportXalanExtension",
        CMEReportXalanExtension.class );
( (ProfessionalConfiguration) saxonConfig ).setExtensionBinder( "java", javaLib );

XslImportResolver myResolve = new XslImportResolver();
tFactory.setURIResolver( myResolve );

try {
    javax.xml.transform.Transformer transformer = tFactory.newTransformer(
            new javax.xml.transform.stream.StreamSource(xslLocation));

    // 后续代码...
} catch (TransformerException e) {
    System.err.println("转换初始化失败: " + e.getMessage());
    e.printStackTrace();
}

运行修改后的代码,即可看到具体的编译错误详情。

2. 检查XSL文件潜在问题

基于现有代码,重点排查以下几点:

  • 扩展函数兼容性:XSL中使用的setfile:getCurrentDir(setfile:new())依赖CMEReportXalanExtension类,需确认:
    • 该类存在public无参构造方法(对应setfile:new());
    • 存在public的getCurrentDir()方法,参数和返回值类型符合调用要求;
    • 命名空间http://com.teamcenter.rac.cme.cmereport/CMEReportXalanExtension与Java代码中绑定的完全一致。
  • XSLT 2.0特性支持:xsl:result-document是XSLT 2.0特性,Saxon EE原生支持,但需确保XSL文件开头的版本声明version="2.0"正确无误。
  • 语法正确性:检查XSL文件中所有标签是否闭合,属性引用是否符合XML规范(如引号配对)。

3. 其他排查方向

  • 确认Saxon EE版本是否为支持XSLT 2.0的稳定版本,避免使用过于老旧的版本;
  • 检查XSL文件路径是否正确,确保xslLocation指向的文件存在且可读取;
  • 若使用了自定义URIResolver,需确认其能正确解析XSL中的导入/包含语句(如果有的话)。

内容的提问来源于stack exchange,提问作者ashish sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:18:09