Java進行時
                把握現在,成就未來!
          posts - 23,comments - 30,trackbacks - 0
          首先我們給出一段示例程序:
          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讀寫XML示例
               * 
               * 
          @param args
               * 
          @throws Exception
               
          */

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

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

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

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

                          }

                          
          if (bl) {
                              
          // 添加一個學生信息
                              Element student = root.addElement("學生");
                              student.addAttribute(
          "sid""100");
                              Element sid 
          = student.addElement("編號");
                              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文件并新增內容
                          Document _document = DocumentHelper.createDocument();
                          Element _root 
          = _document.addElement("學生信息");
                          Element _student 
          = _root.addElement("學生");
                          _student.addAttribute(
          "sid""001");
                          Element _id 
          = _student.addElement("編號");
                          _id.setText(
          "001");
                          Element _name 
          = _student.addElement("姓名");
                          _name.setText(
          "灰機");
                          Element _age 
          = _student.addElement("年齡");
                          _age.setText(
          "18");

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

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


              }

          }

          執行結果應該是這樣:



          循環解析節點:
          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對象相關

          1.讀取XML文件,獲得document對象.
                SAXReader reader = new SAXReader();
                Document   document 
          = reader.read(new File("input.xml"));

          2.解析XML形式的文本,得到document對象.
                String text = "<members></members>";
                Document document 
          = DocumentHelper.parseText(text);

          3.主動創建document對象.
                Document document = DocumentHelper.createDocument();
                Element root 
          = document.addElement("members");// 創建根節點

          二.節點相關

          1.獲取文檔的根節點.
               Element rootElm = document.getRootElement();

          2.取得某節點的單個子節點.
               Element memberElm=root.element("member");// "member"是節點名

          3.取得節點的文字
               String text=memberElm.getText();
          也可以用:
               String text=root.elementText("name");
          這個是取得根節點下的name字節點的文字.

          4.取得某節點下名為"member"的所有字節點并進行遍歷.
          List nodes = rootElm.elements("member");

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

          5.對某節點下的所有子節點進行遍歷.
           for(Iterator it=root.elementIterator();it.hasNext();){
                           Element element 
          = (Element) it.next();
                          
          // do something
                       }

          6.在某節點下添加子節點.
          Element ageElm = newMemberElm.addElement("age");

          7.設置節點文字.
          ageElm.setText("29");

          8.刪除某節點.
          parentElm.remove(childElm);// childElm是待刪除的節點,parentElm是其父節點

          9.添加一個CDATA節點.
                   Element contentElm = infoElm.addElement("content");
                   contentElm.addCDATA(diary.getContent());

                      contentElm.getText(); // 特別說明:獲取節點的CDATA值與獲取節點的值是一個方法
                      contentElm.clearContent(); //清除節點中的內容,CDATA亦可


          三.屬性相關.
          1.取得某節點下的某屬性
                       Element root=document.getRootElement();    
                       Attribute attribute
          =root.attribute("size");// 屬性名name

          2.取得屬性的文字
                       String text=attribute.getText();
          也可以用:
          String text2=root.element("name").attributeValue("firstname");
          這個是取得根節點下name字節點的屬性firstname的值.

          3.遍歷某節點的所有屬性
            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.設置某節點的屬性和文字.
          newMemberElm.addAttribute("name", "sitinspring");

          5.設置屬性的文字
                       Attribute attribute=root.attribute("name");
                       attribute.setText(
          "sitinspring");

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

          四.將文檔寫入XML文件.
          1.文檔中全為英文,不設置編碼,直接寫入的形式.
          XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
          writer.write(document);
          writer.close();

          2.文檔中含有中文,設置編碼格式寫入的形式.
                       OutputFormat format = OutputFormat.createPrettyPrint();
                       format.setEncoding(
          "GBK");    // 指定XML編碼        
                       XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
                      
                       writer.write(document);
                       writer.close();

          五.字符串與XML的轉換
          1.將字符串轉化為XML
          String text = "<members> <member>sitinspring</member> </members>";
          Document document
          = DocumentHelper.parseText(text);

          2.將文檔或節點的XML轉化為字符串.
                       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 2008-09-24 23:53 biiau 閱讀(63127) 評論(14)  編輯  收藏

          FeedBack:
          # re: dom4j讀寫xml文件
          2010-05-04 11:02 | 張志明
          介紹得非常全面,力挺!  回復  更多評論
            
          # re: dom4j讀寫xml文件[未登錄]
          2011-04-07 17:25 | jk
          zan  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2011-05-03 10:59 | 劉松然
          非常好!!!nice,正是我所需要的!  回復  更多評論
            
          # re: dom4j讀寫xml文件[未登錄]
          2011-05-18 10:45 | sa
          hao  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2012-08-17 17:56 | bwu
          very nice!!!!!!!!!!!!  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2012-10-11 16:01 | 試試
          好  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2012-11-06 15:57 | Sartner
          new XMLWriter(new FileWriter(filePath), format);
          這句話會出現
          Invalid byte 1 of 1-byte UTF-8 sequence.
          不知道是什么原因

          這樣寫就可以
          DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File(filePath)));
          dos.write(document.asXML().getBytes("UTF-8"));
            回復  更多評論
            
          # re: dom4j讀寫xml文件
          2013-02-18 16:11 | 1921
          寫得非常好  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2013-04-02 21:54 | 294252247
          兄弟,你上電視了、  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2013-07-29 18:40 | du
          你好,為何我在執行程序時,在.xml文件存在時出現下面的錯誤?
          Exception in thread "main" java.lang.NoClassDefFoundError: org/saxpath/SAXPathException
          at java.lang.ClassLoader.defineClass1(Native Method)
          at java.lang.ClassLoader.defineClass(Unknown Source)
          at java.security.SecureClassLoader.defineClass(Unknown Source)
          at java.net.URLClassLoader.defineClass(Unknown Source)
          at java.net.URLClassLoader.access$100(Unknown Source)
          at java.net.URLClassLoader$1.run(Unknown Source)
          at java.net.URLClassLoader$1.run(Unknown Source)
          at java.security.AccessController.doPrivileged(Native Method)
          at java.net.URLClassLoader.findClass(Unknown Source)
          at java.lang.ClassLoader.loadClass(Unknown Source)
          at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
          at java.lang.ClassLoader.loadClass(Unknown Source)
          at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
          at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
          at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
          at DOM4JTest.main(DOM4JTest.java:43)
          Caused by: java.lang.ClassNotFoundException: org.saxpath.SAXPathException
          at java.net.URLClassLoader$1.run(Unknown Source)
          at java.net.URLClassLoader$1.run(Unknown Source)
          at java.security.AccessController.doPrivileged(Native Method)
          at java.net.URLClassLoader.findClass(Unknown Source)
          at java.lang.ClassLoader.loadClass(Unknown Source)
          at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
          at java.lang.ClassLoader.loadClass(Unknown Source)
          ... 16 more  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2013-07-29 18:47 | du
          可以了,只要導入saxpath的包就好了,可是還是不明白是怎么回事,我看的資料里面好像只要導入dom4j和jaxen就好了。不知道這里為何要導入這個包
            回復  更多評論
            
          # re: dom4j讀寫xml文件[未登錄]
          2014-03-31 17:29 | 瀟湘夜雨
          @du兄弟你明顯是缺jar包啊
            回復  更多評論
            
          # re: dom4j讀寫xml文件
          2015-01-26 10:28 | 張習會
          已加入書簽頁 謝謝  回復  更多評論
            
          # re: dom4j讀寫xml文件
          2015-02-07 15:54 | biiau
          哪呢?@294252247
            回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 呼图壁县| 舒城县| 石景山区| 咸宁市| 定襄县| 延边| 论坛| 铜梁县| 乐陵市| 彩票| 钟山县| 化州市| 克什克腾旗| 桂东县| 阜城县| 分宜县| 石阡县| 肃宁县| 云和县| 竹溪县| 荃湾区| 太原市| 通辽市| 讷河市| 武城县| 青田县| 密山市| 务川| 云南省| 额敏县| 静乐县| 辽阳市| 福海县| 云阳县| 成安县| 蓝山县| 湾仔区| 秭归县| 丽江市| 安国市| 孟津县|