您的位置:首页 > 其它

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

2017-10-19 01:08 447 查看
我有这样一个需求,将一段带有标签、换行符、缩进符的字符串直接当做文本添加到元素中,

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

//创建解析器
SAXReader saxReader = new SAXReader();
//得到document
Document document = saxReader.read(xmlPath);
//得到根节点
Element root = document.getRootElement();
//得到指定元素
List<Element> 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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml dom4j format 空行
相关文章推荐