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

使用XSLT合并XML文件时部分文件触发模板规则内部求值错误

解决XSLT合并XML时Oracle解析器的NullPointerException(命名空间解析错误)

先看关键的错误堆栈信息:

java.lang.RuntimeException: Internal error evaluating template rule at line 8 in module file:/opt/Liferay-Bundle/tomcat-7.0.42/temp/temp128140163092620110910826941/OneShot/ParaNumber/RawMap.xslt
...
Caused by: java.lang.NullPointerException
at oracle.xml.parser.v2.NonValidatingParser.resolveNS(NonValidatingParser.java:1803)
at oracle.xml.parser.v2.NonValidatingParser.expandNamespace(NonValidatingParser.java:1754)

从堆栈能直接定位问题:Saxon在处理Story_u4ac.xml时,调用Oracle的XML解析器做命名空间解析,结果抛出了空指针异常。我之前处理过类似的问题,给你几个排查和解决的方向:

  • 先检查出错的XML文件命名空间
    打开Story_u4ac.xml,重点扫一遍所有命名空间相关的代码:

    • 有没有用了没声明的前缀?比如写了<custom:content>但没加xmlns:custom="http://your-namespace.com"的声明
    • 有没有无效的命名空间属性?比如xmlns:(没写前缀名)、xmlns:test=""(空URI)这种不符合XML规范的写法
    • 命名空间的引号有没有漏闭合?比如xmlns:foo=http://example.com这种低级语法错误
  • 强制Saxon用自带的解析器
    看起来你的环境里Saxon默认调用了Oracle的解析器,二者可能存在兼容性冲突。你可以在代码里强制Saxon使用它自己的解析器,绕过Oracle的实现:

    // 初始化Saxon的TransformerFactory
    TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
    // 获取Saxon配置并设置默认XML解析器
    net.sf.saxon.Configuration config = (net.sf.saxon.Configuration) factory.getAttribute("http://saxon.sf.net/feature/configuration");
    config.setXMLParserClassName("net.sf.saxon.lib.StandardXMLParser");
    
  • 验证XML文件的完整性
    用xmllint这类工具检查Story_u4ac.xml的语法是否合规:

    xmllint Story_u4ac.xml
    

    如果工具报出语法错误,跟着提示修复就行,很多时候空指针都是因为XML本身格式损坏导致的。

  • 检查XSLT里的document()函数调用
    错误是在执行document()加载XML时触发的,你可以确认一下:

    • Story_u4ac.xml是不是真的存在于临时目录里?有没有权限读取?
    • 文件编码是不是和XSLT预期的一致?比如XML是GBK编码,但解析器默认用UTF-8,可能会导致解析异常

内容的提问来源于stack exchange,提问作者hari prasath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:45