java - 如何控制 javax.xml.transform.Transformer 创建的行结尾?

标签 java xml dom

我正在使用以下方法将 DOM 文档 (org.w3c.dom.Document) 转换为流

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, UTF_8.name());
ByteArrayOutputStream out = new ByteArrayOutputStream();
StreamResult output = new StreamResult(out);
Source input = new DOMSource(document);
transformer.transform(input, output);

文档包含带换行符 ('\n') 的文本节点。在输出中他们 替换为 CRLF(“\r\n”),这是不需要的。有没有办法控制它(当然除了之后更换它们)?

我无法控制文档 DTD(-> XML 空白处理)。

(备注:OutputKeys.INDENT 不是正确答案。)

备注:为什么这个问题不同于question 19102804 (Ensure Unix-style line endings) :

  • 这个问题明确指的是 javax.xml.transform.Transformer 以及影响其处理行尾的可能性。问题 19102804 询问任何解决方案,而不仅仅是使用 javax.xml.transform.Transformer 的解决方案。

  • 问题 19102804 仅限于获取“Unix 风格的行尾”的任务。在我的例子中,理想的解决方案是一个组件,它只按原样输出 DOM 模型实例,而不触及任何节点(到目前为止一切都这样做)。

  • 更改 line.separator 系统属性不是一个选项(见评论)。

最佳答案

如果您只想序列化一个 DOM 节点,那么在 Java 世界中您可以使用 LSSerializer ( https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/ls/LSSerializer.html ) 而不是默认的 Transformer 然后您使用方法 setNewLine ( https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/ls/LSSerializer.html#setNewLine(java.lang.String) ) 来定义或控制您首选的行尾。

关于java - 如何控制 javax.xml.transform.Transformer 创建的行结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42580511/

相关文章:

javascript - 是否可以在不循环的情况下在其父节点中获取元素的数字索引?

javascript - 为什么我的 meteor 应用程序创建 "hiddendiv common"div 标签?

java - 停止记录线程并在 mongodb 中提交结果

javascript - 将字符串从 Java .properties 文件安全地传递到由 JavaScript 处理的字符串

java - 如何使用 javaagent 访问工具方法的变量?

xml - 经典 ASP .loadXML(XMLstring) 读出空白?

java - 如何将使用 apache tomcat 托管的 java 应用程序迁移到云端?

android - 卡片边框上的 Imageview - 如何解决?

java - Camel : xsl transformation doesn't indent xml

javascript - IE 和 DOM 标准模型