java - 使用Java解析时如何在文档元素之前保留空格?

标签 java xml dom parsing whitespace

在我的应用程序中,我更改了 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 的一部分,但这不是问题。)

最佳答案

我遇到了同样的问题。我的解决方案是编写自己的 XML 解析器:DecentXML

主要特点:它可以100%保留原始输入,空格,实体,一切。它不会打扰你的细节,但如果你的代码需要像这样生成 XML:

 <element
     attr="some complex value"
     />

那么你可以。

关于java - 使用Java解析时如何在文档元素之前保留空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/868887/

相关文章:

java - Struts 2 验证错误

java - 如何使用 SWT 将自定义图标与系统托盘气球通知/工具提示一起使用?

ios - 了解Apple示例代码中的xml解析

java - 递归函数中的 If 子句

javascript - DOM 更新后出现 "mouseup"问题

html - 如何访问超过2个DOM元素 "The AngularJS way"?

JAVA JTextField验证用户输入的email

java - 有合并迭代器实现吗?

java - 在 RecyclerView 中访问同一行中的所有元素

python - 哪里可以找到 2020 年 NFL XML 赛程数据