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. Python学习札记(七) Basic4 条件判断

    参考:条件判断 Note 1.Python的条件判断关键字与C语言类似,if.else,以及elif,相当于C语言中的else if. 2.Python与C语言不一样的是,使用缩进来判断语句是否属于条 ...

  2. jvm垃圾回收策略

    一.jvm堆内存的分代划分 在基于分代的内存回收策略中,堆空间通常都被划分为3个代,年轻代,年老代(或者tenured代),永久代.在年轻代中又被划分了三个小的区域,分别为:Eden(伊甸)区,S0区 ...

  3. Java_SQL_类型对应_资料

    1.http://argel-lj.iteye.com/blog/1183123 2.http://www.fx114.net/qa-119-110105.aspx JDBC 的"类型&qu ...

  4. JSP 连接数据库

    本章节假设您已经对JDBC有一定的了解.在开始学习JSP数据库访问前,请确保JDBC环境已经正确配置. 首先,让我们按照下面的步骤来创建一个简单的表并插入几条简单的记录: 创建表 在数据库中创建一个E ...

  5. Chrome自动化搭建

    工具安装: 1.selenium-java-2.53.0-srcs.jar 2.selenium-java-2.53.0.jar 3.下载chromedriver.exe(下载地址:http://ch ...

  6. 以普通用户启动的Vim如何保存需要root权限的文件

    在Linux上工作的朋友很可能遇到过这样一种情况,当你用Vim编辑完一个文件时,运行:wq保存退出,突然蹦出一个错误: E45: 'readonly' option is set (add ! to ...

  7. eclipse使用lombok

    1.下载lombok.jar,将lombok复制到eclipse的安装路径下,如图: 2.在eclipse.ini配置文件最后加入:-javaagent:D:\Program Files\Eclips ...

  8. vue中element 的上传功能

    element 的上传功能 最近有个需求,需要在上传文件前,可以进行弹窗控制是否上传upload 看完文档后,感觉有两种思路可以实现 基于before-upload :上传文件之前的钩子,参数为上传的 ...

  9. $.ajaxComplete()

    https://www.cnblogs.com/RachelChen/p/5433881.html 全局ajax事件   必须当页面上存在任何ajax请求的时候都将触发这些特定的全局ajax处理函数. ...

  10. C# 调用颜色的RGB值_RGB颜色转换十六进制颜色

    调用方法: 如:btn_FangTai.BackColor = Color.FromArgb(135, 206, 250); 十六进制颜色查询 颜   色 英文代码 形象描述 十六进制 RGB   L ...