漂洋過(guò)海

          漂洋過(guò)海
          數(shù)據(jù)加載中……
          dom4j讀寫(xiě)xml文件 (轉(zhuǎn))

           

          首先我們給出一段示例程序:

          import java.io.File;
          import java.io.FileWriter;
          import java.util.Iterator;

          import org.dom4j.Document;
          import org.dom4j.DocumentHelper;
          import org.dom4j.Element;
          import org.dom4j.io.OutputFormat;
          import org.dom4j.io.SAXReader;
          import org.dom4j.io.XMLWriter;

          public class DOM4JTest {

              
          /** */
              
          /** */
              
          /** */
              
          /**
               * DOM4J讀寫(xiě)XML示例
               * 
               * 
          @param args
               * 
          @throws Exception
               
          */

              
          public static void main(String[] args) {
                  
          try {
                      XMLWriter writer 
          = null;// 聲明寫(xiě)XML的對(duì)象
                      SAXReader reader = new SAXReader();

                      OutputFormat format 
          = OutputFormat.createPrettyPrint();
                      format.setEncoding(
          "GBK");// 設(shè)置XML文件的編碼格式

                      String filePath 
          = "d:\\student.xml";
                      File file 
          = new File(filePath);
                      
          if (file.exists()) {
                          Document document 
          = reader.read(file);// 讀取XML文件
                          Element root = document.getRootElement();// 得到根節(jié)點(diǎn)
                          boolean bl = false;
                          
          for (Iterator i = root.elementIterator("學(xué)生"); i.hasNext();) {
                              Element student 
          = (Element) i.next();
                              
          if (student.attributeValue("sid").equals("001")) {
                                  
          // 修改學(xué)生sid=001的學(xué)生信息
                                  student.selectSingleNode("姓名").setText("王五");
                                  student.selectSingleNode(
          "年齡").setText("25");

                                  writer 
          = new XMLWriter(new FileWriter(filePath), format);
                                  writer.write(document);
                                  writer.close();
                                  bl 
          = true;
                                  
          break;
                              }

                          }

                          
          if (bl) {
                              
          // 添加一個(gè)學(xué)生信息
                              Element student = root.addElement("學(xué)生");
                              student.addAttribute(
          "sid""100");
                              Element sid 
          = student.addElement("編號(hào)");
                              sid.setText(
          "100");
                              Element name 
          = student.addElement("姓名");
                              name.setText(
          "嘎嘎");
                              Element sex 
          = student.addElement("性別");
                              sex.setText(
          "");
                              Element age 
          = student.addElement("年齡");
                              age.setText(
          "21");

                              writer 
          = new XMLWriter(new FileWriter(filePath), format);
                              writer.write(document);
                              writer.close();
                          }

                      }
           else {
                          
          // 新建student.xml文件并新增內(nèi)容
                          Document _document = DocumentHelper.createDocument();
                          Element _root 
          = _document.addElement("學(xué)生信息");
                          Element _student 
          = _root.addElement("學(xué)生");
                          _student.addAttribute(
          "sid""001");
                          Element _id 
          = _student.addElement("編號(hào)");
                          _id.setText(
          "001");
                          Element _name 
          = _student.addElement("姓名");
                          _name.setText(
          "灰機(jī)");
                          Element _age 
          = _student.addElement("年齡");
                          _age.setText(
          "18");

                          writer 
          = new XMLWriter(new FileWriter(file), format);
                          writer.write(_document);
                          writer.close();
                      }

                      System.out.println(
          "操作結(jié)束! ");
                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }


              }

          }


          執(zhí)行結(jié)果應(yīng)該是這樣:



          循環(huán)解析節(jié)點(diǎn):

          private void getAllNodes(String xml) {
                  
          try {
                      Document authtmp 
          = DocumentHelper.parseText(xml);
                      List
          <Element> list = authtmp.selectNodes("//sms/node");
                      
          for (int j = 0; j < list.size(); j++{
                          Element node 
          = (Element) list.get(j);
                          nodeByNodes(node);
                      }

                  }
           catch (Exception e) {
                      e.printStackTrace();
                  }

              }


              
          private void nodeByNodes(Element node) {
                  
          if (node.element("node"!= null{
                      String id 
          = node.attributeValue("id");
                      String name 
          = node.attributeValue("name");
                      System.out.print(id 
          + "-------");
                      System.out.println(name);
                      
          for (Iterator i = node.elementIterator("node"); i.hasNext();) {
                          Element newNode 
          = (Element) i.next();
                          nodeByNodes(newNode);
                      }

                  }
           else {
                      String id 
          = node.attributeValue("id");
                      String name 
          = node.attributeValue("name");
                      System.out.print(id 
          + "-------");
                      System.out.println(name);
                  }

              }


          其次DOM4J的解釋

          一.Document對(duì)象相關(guān)

          1.讀取XML文件,獲得document對(duì)象.

                SAXReader reader = new SAXReader();
                Document   document 
          = reader.read(new File("input.xml"));


          2.解析XML形式的文本,得到document對(duì)象.

                String text = "<members></members>";
                Document document 
          = DocumentHelper.parseText(text);


          3.主動(dòng)創(chuàng)建document對(duì)象.

                Document document = DocumentHelper.createDocument();
                Element root 
          = document.addElement("members");// 創(chuàng)建根節(jié)點(diǎn)


          二.節(jié)點(diǎn)相關(guān)

          1.獲取文檔的根節(jié)點(diǎn).

               Element rootElm = document.getRootElement();


          2.取得某節(jié)點(diǎn)的單個(gè)子節(jié)點(diǎn).

               Element memberElm=root.element("member");// "member"是節(jié)點(diǎn)名


          3.取得節(jié)點(diǎn)的文字

               String text=memberElm.getText();

          也可以用:

               String text=root.elementText("name");

          這個(gè)是取得根節(jié)點(diǎn)下的name字節(jié)點(diǎn)的文字.

          4.取得某節(jié)點(diǎn)下名為"member"的所有字節(jié)點(diǎn)并進(jìn)行遍歷.

          List nodes = rootElm.elements("member");

          for (Iterator it = nodes.iterator(); it.hasNext();) {
              Element elm 
          = (Element) it.next();
             
          // do something
          }


          5.對(duì)某節(jié)點(diǎn)下的所有子節(jié)點(diǎn)進(jìn)行遍歷.

           for(Iterator it=root.elementIterator();it.hasNext();){
                           Element element 
          = (Element) it.next();
                          
          // do something
                       }


          6.在某節(jié)點(diǎn)下添加子節(jié)點(diǎn).

          Element ageElm = newMemberElm.addElement("age");


          7.設(shè)置節(jié)點(diǎn)文字.

          ageElm.setText("29");


          8.刪除某節(jié)點(diǎn).

          parentElm.remove(childElm);// childElm是待刪除的節(jié)點(diǎn),parentElm是其父節(jié)點(diǎn)


          9.添加一個(gè)CDATA節(jié)點(diǎn).

                   Element contentElm = infoElm.addElement("content");
                   contentElm.addCDATA(diary.getContent());

                      contentElm.getText(); // 特別說(shuō)明:獲取節(jié)點(diǎn)的CDATA值與獲取節(jié)點(diǎn)的值是一個(gè)方法
                      contentElm.clearContent(); //清除節(jié)點(diǎn)中的內(nèi)容,CDATA亦可



          三.屬性相關(guān).
          1.取得某節(jié)點(diǎn)下的某屬性

                       Element root=document.getRootElement();    
                       Attribute attribute
          =root.attribute("size");// 屬性名name


          2.取得屬性的文字

                       String text=attribute.getText();

          也可以用:

          String text2=root.element("name").attributeValue("firstname");

          這個(gè)是取得根節(jié)點(diǎn)下name字節(jié)點(diǎn)的屬性firstname的值.

          3.遍歷某節(jié)點(diǎn)的所有屬性

            Element root=document.getRootElement();    
                      
          for(Iterator it=root.attributeIterator();it.hasNext();){
                           Attribute attribute 
          = (Attribute) it.next();
                           String text
          =attribute.getText();
                           System.out.println(text);
                       }


          4.設(shè)置某節(jié)點(diǎn)的屬性和文字.

          newMemberElm.addAttribute("name", "sitinspring");


          5.設(shè)置屬性的文字

                       Attribute attribute=root.attribute("name");
                       attribute.setText(
          "sitinspring");


          6.刪除某屬性

                       Attribute attribute=root.attribute("size");// 屬性名name
                       root.remove(attribute);


          四.將文檔寫(xiě)入XML文件.
          1.文檔中全為英文,不設(shè)置編碼,直接寫(xiě)入的形式.

          XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
          writer.write(document);
          writer.close();


          2.文檔中含有中文,設(shè)置編碼格式寫(xiě)入的形式.

                       OutputFormat format = OutputFormat.createPrettyPrint();
                       format.setEncoding(
          "GBK");    // 指定XML編碼        
                       XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
                      
                       writer.write(document);
                       writer.close();


          五.字符串與XML的轉(zhuǎn)換
          1.將字符串轉(zhuǎn)化為XML

          String text = "<members> <member>sitinspring</member> </members>";
          Document document
          = DocumentHelper.parseText(text);


          2.將文檔或節(jié)點(diǎn)的XML轉(zhuǎn)化為字符串.

                       SAXReader reader = new SAXReader();
                       Document   document
          = reader.read(new File("input.xml"));            
                       Element root
          =document.getRootElement();                
                       String docXmlText
          =document.asXML();
                       String rootXmlText
          =root.asXML();
                       Element memberElm
          =root.element("member");
                       String memberXmlText
          =memberElm.asXML();

           

          posted on 2012-07-31 20:55 漂洋過(guò)海 閱讀(69) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 曲周县| 奉新县| 鄄城县| 唐海县| 仪陇县| 上蔡县| 繁昌县| 洪雅县| 马尔康县| 东乌珠穆沁旗| 尉犁县| 会宁县| 红安县| 隆子县| 崇信县| 新沂市| 莱西市| 迁安市| 普定县| 永嘉县| 密山市| 麻栗坡县| 左贡县| 东海县| 彰化县| 通化县| 金昌市| 怀来县| 黄平县| 冀州市| 全南县| 察隅县| 晋城| 吉林市| 万州区| 陆良县| 香港| 瑞金市| 禹州市| 正阳县| 茶陵县|