【问题标题】:Saxon indentatation in JavaJava中的撒克逊缩进
【发布时间】:2014-03-30 17:56:11
【问题描述】:

我需要通过支持 XSLT 2.0 的转换器生成缩进良好的 XML 文件。 我发现 Saxon 支持 XSTL 2.0,但我不知道如何生成具有良好缩进的 XML。

使用标准的 JAVA 转换器,我使用了以下代码:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("myOutput.xml"));
transformer.transform(source, result);

实际上效果很好,但如果我切换到撒克逊人:

TransformerFactory transformerFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);

然后缩进不再起作用。 我还阅读了文档,似乎我必须使用 saxon:indent-spaces 属性,但它似乎只在 Saxon 的 PE 版本中可用。但是它说默认值是3,所以它应该默认缩进。

无论如何,您知道用 Saxon(免费版)生成缩进良好的 XML 的方法吗?

谢谢

【问题讨论】:

  • 你能举一个你正在处理的输入和输出 XML 的例子吗?它是否有任何开头的缩进,或任何带有前导或尾随空格的文本节点?

标签: java xslt saxon


【解决方案1】:

您的代码对我有用;要进行调查,我们需要查看输入和输出的完整详细信息、您使用的 Saxon 版本等。

顺便提一下,使用带有 Saxon 的 DOMSource 比使用 StreamSource 或 SAXSource 慢十倍。除非您出于其他令人信服的原因需要构建 DOM,否则不要这样做。

【讨论】:

  • 似乎是根中的 xml:space="preserve" 标签。有趣的是,使用标准变压器不会出现问题。
  • “标准”我认为您的意思是“非标准”。该标准明确规定,如果 xml:space="preserve" 存在于树中,则序列化程序不得添加或删除任何空格。
猜你喜欢
  • 1970-01-01
  • 2016-01-25
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多