Java:XML转换,Text节点中的换行符,打破缩进

时间:2009-09-06 08:45:10

标签: java xml transform

我正在构建一个XML文档,并使用JVM内置库打印成缩进格式。当文档中有一个包含换行符的文本节点时,它会将行包装到行的开头而不是正确的缩进位置

示例代码

ByteArrayOutputStream s;

s = new ByteArrayOutputStream();

Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Transformer t = TransformerFactory.newInstance().newTransformer();

Element a;
Text b;

a = d.createElement("a");

String text = "multi\nline\ntext";
b = d.createTextNode(text);

a.appendChild(b);
d.appendChild(a);

t.setOutputProperty(OutputKeys.INDENT,"yes");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
t.transform(new DOMSource(d), new StreamResult(s));

System.out.println(new String(s.toByteArray()));

输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>multi
line
text</a>

期望的输出

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<a>
 multi
 line
 text
</a>

是否有一种聪明的方法可以使每个新行从缩进的xml标记开始的位置开始?有什么东西告诉我textnode不是正确的用法吗?还有更好的东西吗?

1 个答案:

答案 0 :(得分:2)

请注意,更改缩进实际上会更改该节点的文本内容。即。

<a>
 multi
 line
 text
</a>

将导致XML apis读取文本中的多个前导空格。那是你要的吗 ?我知道这不是你问题的答案,但我不确定你真的想保持缩进。您将如何处理在XML结构中进一步缩进的文本节点(即具有更多前导空格)?