dom4j 改变XML声明和编码格式
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.setXMLEncoding和format.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声明和编码格式的更多相关文章
- XML学习笔记(2)--dom4j操作XML
1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- 【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...
- Java实现——Dom4j读写XML文件
1. dom4j概述 解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP. 最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义. 2. do ...
- Strus2第一次课:dom4j解析xml文档
xml文本标记语言: 常用于交换数据:独立于操作系统.编程语言数据存储:xml数据配置:灵活性强,可读性高可以使用css样式改变xml样式 xml解析技术:dom解析xml技术: sax解析xml技术 ...
- dom4j操作xml
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件.是一个非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源工具.可以在这个 ...
- DOM4J解析XML文档
Tip:DOM4J解析XML文档 Dom4j是一个简单.灵活的开放源代码的库.Dom4j是由早期开发JDOM的人分离出来而后独立开发的.与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j ...
- 使用DOM4J解析XML文档,以及使用XPath提取XML文档
使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ...
- Dom4j下载及使用Dom4j读写XML简介
sitinspring(如坐春风)原创,转载请注明作者及出处. 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4 ...
随机推荐
- 06_zookeeper_原生API使用2
1. 设置znode节点数据(同步) import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java ...
- Devops 到底是什么?
Devops 到底是什么? 过去一年以来,一批来自欧美的.不墨守陈规的系统管理员和开发人员一直在谈论一个新概念:DevOps.DevOps就是开发(Development)和运维(Operations ...
- 《用 Python 学微积分》笔记 3
<用 Python 学微积分>原文见参考资料 1. 16.优化 用一个给定边长 4 的正方形来折一个没有盖的纸盒,设纸盒的底部边长为 l,则纸盒的高为 (4-l)/2,那么纸盒的体积为: ...
- 在Jupyter notebook中使用特定虚拟环境中的python的kernel
在虚拟环境tf中安装完tensorflow后,在虚拟环境tf打开的jupyter里发现只有一个kernel-python3,新建一个文件, import tensorflow as tf ,发 ...
- Java网络编程学习A轮_01_目标与基础复习
A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟 ...
- UML类图概述、设计模式
深入浅出UML类图(http://blog.csdn.net/lovelion/article/details/7843308) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相 ...
- MongoDB 查看所有用户账号信息
在 MongoDB 中创建了很多帐号,怎么查看所有帐号信息? 1. 查看全局所有账户 2. 查看当前库下的账户 查看全局所有账户 : > use admin switched to db adm ...
- angular $q的学习笔记转帖
http://blog.segmentfault.com/bornkiller/1190000000402555 angular $q的一个不错的学习笔记
- buctoj——合法的出栈顺序
题目描述 我们知道,一个入栈序列是{1,2,3}的合法出栈序列有{3,2,1},{1,2,3}等,而{3,1,2}是不合法的.现在冰语有一个长度为n的序列A(保证序列内数字唯一,且1<=A[i] ...
- yii2出现的400错误
来一段百度来的正常解决方法,注意有很大的坑! 第一种解决办法是关闭Csrf 1配置文件关闭 2控制器里面关闭 public function init(){ $this->enableCsrfV ...