【问题标题】:Java: XML Transform, line break in Text node, breaks indentingJava:XML 转换,文本节点中的换行符,中断缩进
【发布时间】:2009-09-06 08:45:10
【问题描述】:

我正在构建一个 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 不是正确的使用方法?有更好的吗?

【问题讨论】:

    标签: java xml transform


    【解决方案1】:

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

    <a>
     multi
     line
     text
    </a>
    

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

    【讨论】:

    • 你说得对,我可能需要为此使用 cdata 之类的东西
    • 或者使用 编码允许它放在一行上。无论如何,如果不更改内容,您的 textnode 就无法很好地打印出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2014-05-07
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多