如何读取和写入XML文件,并在保存时将注释节点视为Java中的文本节点

如何读取和写入XML文件,并在保存时将注释节点视为Java中的文本节点,java,xml,dom,transformer,Java,Xml,Dom,Transformer,我正在读取从外部系统检索到的Java格式的XML文件,然后对其进行处理,最终将其保存在本地并重新部署 外部系统为我提供了一个包含此节点的XML文件: GDPR_管理 问题在于注释节点。 当我读取文件并保存时,结果如下所示: GDPR_管理 这是一个问题,因为当我将文件部署回外部系统时,它现在认为标签有一些文本内容。因此,我需要与原来相同的结果,即注释节点周围没有换行符 我尝试删除所有注释节点,这在部署文件时效果很好,但该文件也使用git进行版本控制,并且会产生许多合并冲突,因为可以随时从

我正在读取从外部系统检索到的Java格式的XML文件,然后对其进行处理,最终将其保存在本地并重新部署

外部系统为我提供了一个包含此节点的XML文件:


GDPR_管理
问题在于注释节点。 当我读取文件并保存时,结果如下所示:


GDPR_管理
这是一个问题,因为当我将文件部署回外部系统时,它现在认为标签有一些文本内容。因此,我需要与原来相同的结果,即注释节点周围没有换行符

我尝试删除所有注释节点,这在部署文件时效果很好,但该文件也使用git进行版本控制,并且会产生许多合并冲突,因为可以随时从外部系统再次检索该文件(检索到的文件再次与注释节点一起,如第一个示例所示)

然后我尝试在保存之前将所有注释节点更改为文本节点。该结果同样是不可接受的,因为该标签再次包含一些文本内容:


!--  GDPR管理--
GDPR_管理
我如何阅读文件:

var docBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
var document=docBuilder.parse(inputStream);
document.getDocumentElement().normalize();
var xp=XPathFactory.newInstance().newXPath();
var nl=(NodeList)xp.evaluate(“//text()[normalize space(.)=”),document,xpathcontents.NODESET);
对于(int i=0;i
如何保存文档:

var result=新的StreamResult(outputStream);
var transformer=TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT,“是”);
setOutputProperty(OutputKeys.OMIT_XML_声明,“no”);
transformer.setOutputProperty(OutputKeys.VERSION,“1.0”);
transformer.setOutputProperty(OutputKeys.ENCODING,“UTF-8”);
transform(新的DOMSource(文档)、result);
我确实需要与第一个示例相同的结果,但我不关心处理文件时注释节点在dom中的表示方式


谢谢你的提示

如果希望输出与原始相同,请不要使用indent=“yes”。指定
indent=“yes”
允许序列化程序在任何需要的地方插入空白。

不是注释节点。这是空白。@Raedwald空白是由注释节点生成的,所以是的,你是对的。