首页 > 学院 > 开发设计 > 正文

dom4j 改变XML声明和编码格式

2019-11-14 23:34:01
字体:
来源:转载
供稿:网友
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.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或者WriterXMLWriter 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 blocke.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 blocke.printStackTrace();LOG.error("trans for XML error:", e);}

记录。

相关链接:http://www.VEvb.com/problems/64178http://bbs.csdn.net/topics/370057777http://liuchunqing2001.blog.163.com/blog/static/3082291201382911214196/http://lavasoft.blog.51cto.com/62575/235272http://www.educity.cn/wenda/105197.htmlhttp://www.blogjava.net/i369/articles/154264.htmlhttp://bbs.csdn.net/topics/290027113http://developer.51cto.com/art/200903/117512.htmhttp://pridesnow.VEvb.com/blog/561958http://blog.csdn.net/chenghui0317/article/details/11486271Java创建xml文档笔记(DOM,DOM4J)http://www.VEVb.com/lanxuezaipiao/archive/2013/05/17/3082949.html


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表