猿问

与 Xalan 一起使用 Saxon

我有一个应用程序,我使用 Xalan 作为 XSLT 处理器。我现在想使用撒克逊人。我想确保所有现有的转换仍然有效。因此我想对所有现有的 XML 文件使用 Xalan。对于新的 XML 文件,我想使用 Saxon。总而言之,我想同时使用两个处理器。因此,我像这样实例化处理器:


TransformerFactory.newInstance("com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl", null);

or

TransformerFactory.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: null

JAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: null

JAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: null

Calling com.saxonica.SchemaFactoryImpl.isSchemaLanguageSupported("http://www.w3.org/2001/XMLSchema"); returning true

JAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: null

JAXP: find factoryId =javax.xml.transform.TransformerFactory

JAXP: find factoryId =javax.xml.transform.TransformerFactory

JAXP: find factoryId =javax.xml.transform.TransformerFactory

JAXP: find factoryId =javax.xml.transform.TransformerFactory

JAXP: find factoryId =javax.xml.transform.TransformerFactory

JAXP: created new instance of class org.apache.xalan.xsltc.trax.TransformerFactoryImpl using ClassLoader: null



紫衣仙女
浏览 177回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答