我為人人,人人為我

          PLM,PDM制造業(yè)的制勝法寶
          posts - 16, comments - 9, trackbacks - 0, articles - 1
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          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)好


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 沂水县| 鲁甸县| 鄱阳县| 凤庆县| 麟游县| 北辰区| 临安市| 海原县| 怀宁县| 南皮县| 新蔡县| 石屏县| 井研县| 资源县| 美姑县| 博白县| 许昌县| 余江县| 新昌县| 东辽县| 报价| 兴隆县| 苏尼特左旗| 兴化市| 潢川县| 定襄县| 曲周县| 永州市| 嘉峪关市| 岳阳县| 收藏| 静安区| 临洮县| 澄江县| 察隅县| 嵩明县| 紫金县| 蒙阴县| 会昌县| 德化县| 闵行区|