【问题标题】:Saxon 9.6.0.7 version also needs saxon-dom?Saxon 9.6.0.7版本还需要saxon-dom?
【发布时间】:2015-10-08 10:28:21
【问题描述】:

我正在升级我的 saxon 依赖项的版本,但项目无法运行,因为我正在使用 DOMSource 实例进行转换。

public String getXML(Node objNode) throws Exception{
     Transformer t = ThreadLocalHelper.getDomTransformer().get();
     t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,"yes");
     StringWriter w = new StringWriter(4096);
     t.transform(new DOMSource(objNode), new StreamResult(w));
     return w.toString();
}

在 saxon 9.6 中还有另一种转换节点/文档的方法吗?

谢谢

【问题讨论】:

  • 此代码应该“开箱即用”,适用于包括 Saxon-HE 在内的所有 Saxon 版本。它是如何失败的? (但请注意,将 DOM 用于 Saxon 输入比允许 Saxon 使用其自己的原生树格式要慢得多)。
  • 您提到“saxon-dom”表明您以前使用过旧的 Saxon 版本,其中 DOM 支持代码是单独 JAR 的一部分?这种分离是为了解决不再相关的 JDK 版本之间的历史不兼容问题,因此 DOM 代码被集成回主 JAR 文件中。
  • 是的,这就是我所坚持的。关于 DOMSource,我不知道进行此转换的其他方法,因为我需要转换 Node 对象。是的,我使用的是 9.1 版本。
  • 我收到此错误:原因:java.lang.IllegalArgumentException:使用 DOMSource 时,saxon9-dom.jar 必须在类路径中
  • Saxon DOM 支持在 9.1 中位于单独的 JAR 文件中,但在 9.6 中不再是这种情况。您引用的消息来自旧版本。

标签: java xslt dom saxon


【解决方案1】:

我正在使用:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
Result result = new StreamResult(bos);

// Transform into HTML
try {
    transformer.transform(xmlDocument, result);
} catch (TransformerException e) {
    // do stuff
}

使用 xmlDocument 作为 StreamSource:

xmlDocument = new StreamSource(new ByteArrayInputStream(xml.getBytes(encoding)))

使用撒克逊 9.6.0-7

【讨论】:

  • 问题是我收到了一个需要转换的 Node 对象。无论如何,我可以将节点转换为流源吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多