Dom4j简单学习


在使用dom4j读取xml的字符串是出现了不支持中文的问题。xml数据中有中文,在读取xml的时候总是出现异常(org.dom4j.DocumentException: Error on line -1 of document  : unsupported five or six byte UTF-8 sequence),但是因为却没有问题。开始以为dom4j对中文支持有问题,但是后来发现并非开始所想那样。

 

Code

SAXReader objReader = new SAXReader();

Document objDom = objReader.read(new StringBufferInputStream(strXML));

查看jdk中对类StringBufferInputStream的注释:注释:不推荐使用 StringBufferInputStream 方法。 此类不能将字符正确的转换为字节。同 JDK 1.1 版中的类似,从一个串创建一个流的最佳方法是采用 StringReader 类。至此才恍然大悟,原来StringBufferInputStream类不支持八字节以上的字符。

 

Dom4j解析xml方法:

SAXReader objReader = new SAXReader();

Document   objDom    = objReader.read(new StringReader(strXML));

//read 方法有很多重载,具体请看api

Document   objDom = DocumentHelper.parseText(strTemplateInfo);

 

Dom4j读写xml例程

package oracle.erp.test;

 

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

 

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.XMLWriter;

 

public class Dom4jTest {

 

    public static void main(String[] args) {

       String strXml = "<学生信息><学生><编号>001</编号><姓名>张三</姓名>"

              + "<年龄>23</年龄></学生></学生信息>";

 

       try {

           ReadAndWriteXml(strXml);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

 

    /**

     * Description:读取并修改xml,写入文件

     * @param strXml xml String

     * @throws DocumentException

     */

    public static void ReadAndWriteXml(String strXml) throws Exception {

       Document doc = null;

       Element rootElement = null;

 

       doc = DocumentHelper.parseText(strXml);// 创建 document.

       rootElement = doc.getRootElement();

       Element newStudent = DocumentHelper.createElement("学生");

       newStudent.add(DocumentHelper.createElement("编号").addText("002"));

       newStudent.add(DocumentHelper.createElement("姓名").addText("李四"));

       newStudent.add(DocumentHelper.createElement("年龄").addText("24"));

       rootElement.add(newStudent);

       System.out.println(doc.asXML());

 

       // 写文件

       OutputFormat format = OutputFormat.createPrettyPrint();// 创建美化格式

       format.setEncoding("utf-8");

       XMLWriter studentwriter = null;

       studentwriter = new XMLWriter(

              new FileOutputStream(new File("c:/student.xml")), format);// "c:\"下写入student.xml文件

       studentwriter.write(doc);// XML文档

       studentwriter.close();

 

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值