为了账号安全,请及时绑定邮箱和手机立即绑定

与 Xalan 一起使用 Saxon

与 Xalan 一起使用 Saxon

紫衣仙女 2021-09-03 10:08:31
我有一个应用程序,我使用 Xalan 作为 XSLT 处理器。我现在想使用撒克逊人。我想确保所有现有的转换仍然有效。因此我想对所有现有的 XML 文件使用 Xalan。对于新的 XML 文件,我想使用 Saxon。总而言之,我想同时使用两个处理器。因此,我像这样实例化处理器:TransformerFactory.newInstance("com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl", null);orTransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);在我现有的所有单元测试中,我都使用 Xalan。但是当我将 Saxon 添加到我的类路径时,其中一些失败了。失败的测试都使用 Apache FOP 来创建 PDF 文件。不同的是,现在生成的 PDF 中插入了一些制表符(缩进键)(不在可见内容中,我只是在比较字节码时看到它们)。我认为这种行为很奇怪,因为我仍然使用 Xalan 并期望与我的类路径中没有 Saxon 时的结果相同。那么当 Saxon 在类路径中时还有什么变化呢?当我添加System.setProperty("javax.xml.transform.TransformerFactory",            "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");在我的测试中,它再次与类路径中的 Saxon 一起使用。但这不是我的生产环境的解决方案,因为我想在两个处理器之间动态切换。那么有人知道当我将 Saxon 添加到我的类路径时还有什么变化吗?非常感谢!更新: 我设置了 jaxp.debug 标志并获得以下输出(在类路径中使用 Xalan 和 Saxon)    JAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullCalling com.saxonica.SchemaFactoryImpl.isSchemaLanguageSupported("http://www.w3.org/2001/XMLSchema"); returning trueJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: nullJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: find factoryId =javax.xml.transform.TransformerFactoryJAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: null
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信