我有一个编辑 xml 文件的方法。该方法的总体概要是:
public void process(Path anXmlFile) {
try {
anXmlFile= anXmlFile.normalize();
log.debug("processing {}",anXmlFile);
Document dom = buildDOM(anXmlFile.toFile());
//do stuff with dom...
//delete original file
//and finally ...
dom.normalize(); //so we get a more predictable order
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
Source source = new DOMSource(dom);
Result result = new StreamResult(anXmlFile.toFile());
transformer.transform(source, result);
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
我的问题是,如果我对在某一行打开并在下一行关闭的 xml 有一个多行注释(请注意换行符):
<!-- this is a long comment[cr][lf]
that spans 2 lines -->
而不是在我写出修改后的 DOM 之后,结果将是:
<!-- this is a long comment[cr]
that spans 2 lines -->
问题是 [cr][lf] 变成了 [cr]。这是 xml 中唯一以这种方式受到影响的部分。所有其他行尾都与原始 ([cr][lf]) 相同 - 即使是我修改过的那些(我的代码不会更改 DOM 中的注释节点)。
我可以为我创建的 Transformer 提供任何配置选项来避免这种情况吗?这一切都是使用 JDK 类完成的,不涉及 xml 库。