Dom4j簡(jiǎn)單學(xué)習(xí)
Posted on 2007-07-13 21:41 Glen 閱讀(1334) 評(píng)論(0) 編輯 收藏 所屬分類: XML相關(guān)
在使用dom4j讀取xml的字符串是出現(xiàn)了不支持中文的問(wèn)題。xml數(shù)據(jù)中有中文,在讀取xml的時(shí)候總是出現(xiàn)異常(org.dom4j.DocumentException: Error on line -1 of document : unsupported five or six byte UTF-8 sequence),但是因?yàn)閰s沒(méi)有問(wèn)題。開(kāi)始以為dom4j對(duì)中文支持有問(wèn)題,但是后來(lái)發(fā)現(xiàn)并非開(kāi)始所想那樣。
Code:
SAXReader objReader = new SAXReader(); Document objDom = objReader.read(new StringBufferInputStream(strXML)); |
查看jdk中對(duì)類StringBufferInputStream的注釋:注釋:不推薦使用 StringBufferInputStream 方法。 此類不能將字符正確的轉(zhuǎn)換為字節(jié)。同 JDK 1.1 版中的類似,從一個(gè)串創(chuàng)建一個(gè)流的最佳方法是采用 StringReader 類。至此才恍然大悟,原來(lái)StringBufferInputStream類不支持八字節(jié)以上的字符。
Dom4j解析xml方法:
SAXReader objReader = new SAXReader(); Document objDom = objReader.read(new StringReader(strXML)); //read 方法有很多重載,具體請(qǐng)看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 = "<學(xué)生信息><學(xué)生><編號(hào)>001</編號(hào)><姓名>張三</姓名>" + "<年齡>23</年齡></學(xué)生></學(xué)生信息>"; 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);// 創(chuàng)建 document. rootElement = doc.getRootElement(); Element newStudent = DocumentHelper.createElement("學(xué)生"); newStudent.add(DocumentHelper.createElement("編號(hào)").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();// 創(chuàng)建美化格式 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(); } } |
做人簡(jiǎn)單一點(diǎn)好