首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合使用Xalan和Saxon

结合使用Xalan和Saxon
EN

Stack Overflow用户
提问于 2012-06-27 19:08:58
回答 2查看 4.7K关注 0票数 8

我在应用程序中使用Xalan,但需要使用带有参考实现的Saxon来生成测试输出,以便与之进行比较。我想在单元测试中同时使用它们。但是,一旦我在项目.pom中添加了对Saxon的依赖,应用程序似乎在测试期间对所有的xslt和XPath操作都使用了Saxon:

代码语言:javascript
复制
<dependency>
  <groupId>net.sf.saxon</groupId>
  <artifactId>Saxon-HE</artifactId>
  <version>9.4</version>
  <scope>test</scope>
</dependency>

这使得主应用程序在生成输出时由于不同的XPath行为而失败。当在测试范围之外运行主应用程序时,它可以工作。

在测试期间,我如何使用Xalan运行主应用程序,而使用Saxon进行测试?

在运行Xalan和Saxon部分之前,我已经尝试设置了以下属性:

代码语言:javascript
复制
System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl ");
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

我还尝试将Xalan和Saxon部分放在不同的项目中,我还尝试在第三个项目中使用这两个部分,结果相同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 21:59:43

避免依赖JAXP工厂机制来选择转换引擎。取而代之的是显式地加载你想要的引擎:它更可靠,速度也更快。对于Saxon,替换调用

代码语言:javascript
复制
TransformerFactory.newInstance()

使用

代码语言:javascript
复制
new net.sf.saxon.TransformerFactoryImpl()

和Xalan使用

代码语言:javascript
复制
new org.apache.xalan.processor.TransformerFactoryImpl()
票数 11
EN

Stack Overflow用户

发布于 2012-06-28 16:56:02

下面是完整性的解决方案:

代码语言:javascript
复制
System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":"
    + XPathFactory.DEFAULT_OBJECT_MODEL_URI,
    "org.apache.xpath.jaxp.XPathFactoryImpl");
System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":"
    + NamespaceConstant.OBJECT_MODEL_SAXON,
    "net.sf.saxon.xpath.XPathFactoryImpl");

XPathFactory jaxpFactory =
    XPathFactory.newInstance(XPathFactory.DEFAULT_OBJECT_MODEL_URI);
XPathFactory saxonFactory =
    XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11224850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档