dom4j 改变XML编码

Element rootElement = document.addElement("data");
document.setXMLEncoding("GBK"); //默认utf-8
...

使用document.setXMLEncoding这样设置而生成的xml文件仍然是utf-8编码。

需要使用OutputFormat设置输出文件编码格式。

 public static void writeXMLFile(Document document,File file,String Encoding){
try {
OutputFormat format = OutputFormat.createPrettyPrint();//美化输出 不想美化可以使用new OutputFormat();
format.setEncoding(Encoding.toUpperCase());
OutputStream out = new FileOutputStream(file);
XMLWriter writer = new XMLWriter(out,format);
writer.write(document);
writer.close();
}catch (IOException e) {
e.printStackTrace();
}

使用OutputFormat,可以设置xml输出文件编码,并且xml文件声明处也会跟着改变。

引用别人答案:解释document.setXMLEncodingformat.setEncoding设置编码的区别

public class TestXML{
@Test
public void test() throws IOException{
Document doc = new DefaultDocument();
doc.addElement("root");
// 这里打印出来是默认的utf-8
System.out.println(doc.asXML());
doc.setXMLEncoding("utf-16");
// 这里打印出来是修改后的utf-16
System.out.println(doc.asXML());
// 这里没有设置编码格式默认保存的是utf-8,看一下dom4j的源码就知道了
saveXML(doc, "D:\\temp\\test\\test1.xml", null);
// 这里设置了所以保存以后编码格式是big5
saveXML(doc, "D:\\temp\\test\\test2.xml", "big5");
}
private void saveXML(Document doc, String filePath, String encode) throws IOException{
OutputFormat format = new OutputFormat();
if (null != encode){
format.setEncoding(encode.toUpperCase());
}
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(filePath),format);
xmlWriter.write(doc);
xmlWriter.flush();
xmlWriter.close();
}
}

上面代码出自此处。

最后要说一下:

XMLWriter可以传入OutputStream或者Writer
XMLWriter writer = new XMLWriter(OutputStream, OutputFormat);
XMLWriter writer = new XMLWriter(Writer, OutputFormat);
最初试着传入了new FileWriter(file),如下
try {
XMLWriter writer = new XMLWriter(new FileWriter(f), format);
writer.write(document);
writer.close();
result = fileName;
} catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
但是得到的结果并不对。修改为如下后,结果正确。
try {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(f), format);
xmlWriter.write(document);
xmlWriter.flush();
xmlWriter.close();
result = fileName;
} catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace();
LOG.error("trans for XML error:", e);
}

记录。

相关链接:

http://www.iteye.com/problems/64178

http://bbs.csdn.net/topics/370057777

http://liuchunqing2001.blog.163.com/blog/static/3082291201382911214196/

http://lavasoft.blog.51cto.com/62575/235272

http://www.educity.cn/wenda/105197.html

http://www.blogjava.net/i369/articles/154264.html

http://bbs.csdn.net/topics/290027113

http://developer.51cto.com/art/200903/117512.htm

http://pridesnow.iteye.com/blog/561958

http://blog.csdn.net/chenghui0317/article/details/11486271

Java创建xml文档笔记(DOM,DOM4J)

http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/17/3082949.html

dom4j 改变XML声明和编码格式的更多相关文章

  1. XML学习笔记(2)--dom4j操作XML

    1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...

  2. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  3. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  4. Java实现——Dom4j读写XML文件

    1. dom4j概述 解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP. 最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义. 2. do ...

  5. Strus2第一次课:dom4j解析xml文档

    xml文本标记语言: 常用于交换数据:独立于操作系统.编程语言数据存储:xml数据配置:灵活性强,可读性高可以使用css样式改变xml样式 xml解析技术:dom解析xml技术: sax解析xml技术 ...

  6. dom4j操作xml

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件.是一个非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源工具.可以在这个 ...

  7. DOM4J解析XML文档

    Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...

  8. 使用DOM4J解析XML文档,以及使用XPath提取XML文档

    使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...

  9. Dom4j下载及使用Dom4j读写XML简介

    sitinspring(如坐春风)原创,转载请注明作者及出处. 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4 ...

随机推荐

  1. SQL优化的若干原则

    SQL语句:是对数据库(数据)进行操作的惟一途径:消耗了70%~90%的数据库资源:独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低:可以有不同的写法:易 ...

  2. Java常用的几种线程池

    常用的几种线程池 5.1 newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程. 这种类型的线程池特点是: 工作线程的创 ...

  3. QT 样式表实例

    目标:实现button的圆角效果及背景颜色,鼠标滑过颜色变亮,鼠标点击颜色变重. 总体思路首,先根据需要及样式规则新建.qss文件,然后在代码中将文件引用并应用样式. 具体过程如下: 1在项目当前目录 ...

  4. [sping]xml配置文件中factory-bean与factory-method(spring使用工厂方法注入bean)

    public class CarFactory { //非静态方法 public Car createCar(){ Car car = new Car(); car.setBrand("BM ...

  5. SpringSecurity——基于Spring、SpringMVC和MyBatis自定义SpringSecurity权限认证规则

    本文转自:https://www.cnblogs.com/weilu2/p/springsecurity_custom_decision_metadata.html 本文在SpringMVC和MyBa ...

  6. Mysql解压版配置环境等

    背景故事:安装版的mysql和我的本本有仇,最后一步老卡死 1.首先先把下载好的压缩包解压,如下图:

  7. CentOS 7添加应用快捷方式到桌面

    以eclipse为例,编辑下面文件,复制到桌面即可. vi client.desktop [Desktop Entry]Encoding=UTF-8Name=eclipseExec=/home/clo ...

  8. 【Demo】CSS3 动画

    CSS3 动画(@keyframes,animation) CSS3 @keyframes 规则 要创建CSS3动画,你将不得不了解@keyframes规则. @keyframes规则是创建动画. @ ...

  9. logback配置日志输出

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...

  10. Python不同版本切换

    2016年6月8日更新: 这是我早前写的一篇小文章,其实,后来也没有采用这种方法切换.电脑上安装了多个Python 版本,保证自己经常用的版本加入环境变量外,使用非系统的版本时一般使用 IDE 编辑器 ...