在使用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();
} } |