dom4j 回写 xml 时会给 xml 文件其他部分内容添加空白行

我有这样一个需求,将一段带有标签、换行符、缩进符的字符串直接当做文本添加到元素中,

先按照正常的 dom4j 操作流程写入这段字符串:如下

	//创建解析器
	SAXReader saxReader = new SAXReader();
	//得到document
	Document document = saxReader.read(xmlPath);
	//得到根节点
	Element root = document.getRootElement();
	//得到指定元素
	List list = root.elements("select");
	//将文本添加进去
	list.get(0).addText("[xmlContent]");
	//回写xml
	OutputFormat format = OutputFormat.createPrettyPrint();
	XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(xmlPath),format);
	xmlWriter.write(document);
	xmlWriter.close();

这时会遇到一些问题:
1、写入时 ‘<’ 等字符会被转义,添加了后面这句话拒绝符号转义,xmlWriter.setEscapeText(false);
2、默认的,format会把我们的字符串中的换行缩进等格式清空;format.setTrimText(false); 这样来阻止格式清空
3、这样就来到了我们最大的难题,很奇怪的,在多次执行这段语句向不同标签添加内容的时候,每次会给我们其他同样标签的位置添加空格,看了一些网友遇到的问题,都没有解决掉,比如:format.setNewLineAfterDeclaration(false); 这个方法也不能解决这个问题。

我将 xmlWriter 和 format 的 set 方法排列组合,经过了很多次尝试之后,发现问题出在 xmlWriter.setEscapeText(false); 这句话上面;format.setIndent(true); format.setNewlines(false); 添加这两句话,设置缩进为true,换行为false,即可解决。

代码如下:

	OutputFormat format = OutputFormat.createPrettyPrint();
    format.setIndent(true); 
    format.setTrimText(false);   
    format.setNewlines(false);
	XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(xmlPath),format);
	xmlWriter.setEscapeText(false); 
	xmlWriter.write(document);
	xmlWriter.close();

你可能感兴趣的:(dom4j 回写 xml 时会给 xml 文件其他部分内容添加空白行)