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

来源:互联网 发布:淘宝做工瑕疵运费 编辑:程序博客网 时间:2024/05/31 05:28

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

先按照正常的 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();

供参考。

原创粉丝点击