【发布时间】:2010-10-26 12:22:12
【问题描述】:
在我的应用程序中,我更改了 XML 文件的某些部分,其开头如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ -->
<myElement>
...
注意<myElement> 之前的空行。加载、修改、保存后,效果差强人意:
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: version control yadda-yadda $ --><myElement>
...
我发现注释和文档节点之间的空格(一个换行符)根本没有在 DOM 中表示。以下独立代码可靠地重现了该问题:
String source =
"<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<!-- foo -->\n<empty/>";
byte[] sourceBytes = source.getBytes("UTF-16");
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc =
builder.parse(new ByteInputStream(sourceBytes, sourceBytes.length));
DOMImplementationLS domImplementation =
(DOMImplementationLS) doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
System.out.println(lsSerializer.writeToString(doc));
// output: <?xml version="1.0" encoding="UTF-16"?>\n<!-- foo --><empty/>
有人知道如何避免这种情况吗?本质上,我希望输出与输入相同。 (我知道 xml 声明将被重新生成,因为它不是 DOM 的一部分,但这不是问题。)
【问题讨论】:
-
我最终使用自定义 OutputStream 类将其破解到输出中,该类查找“-->
-
我有同样的问题。你能帮忙吗? stackoverflow.com/questions/30940162/…
标签: java xml dom parsing whitespace