<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(63118) 評論(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
      回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲三级中文字幕| 黄色三级三级免费看| 在线免费观看一级毛片| 黄色毛片免费网站| 久久香蕉国产线看观看亚洲片| 人妻无码久久一区二区三区免费 | 国产亚洲精aa成人网站| 久章草在线精品视频免费观看| 久久国产亚洲精品| 国产亚洲美女精品久久久2020| 人与禽交免费网站视频| 国产成人+综合亚洲+天堂| 亚洲国产成人久久综合一| 免费毛片在线播放| 久久99热精品免费观看牛牛| 亚洲中文字幕无码爆乳| 亚洲国产精品无码av| 国产高清在线免费视频| 久久午夜羞羞影院免费观看| 国产亚洲视频在线观看| 亚洲黄网站wwwwww| 中文字幕第一页亚洲| 成熟女人特级毛片www免费| 中文字幕乱码一区二区免费| 亚洲国产精品无码中文lv| 亚洲Av熟妇高潮30p| 亚洲 综合 国产 欧洲 丝袜| 国产精品久久久久久久久免费| 精品97国产免费人成视频| 亚洲精品欧美综合四区| 亚洲美女精品视频| 亚洲中文字幕在线乱码| 国产乱色精品成人免费视频| 黄色免费网站网址| 午夜无码A级毛片免费视频| 一级看片免费视频| 色偷偷尼玛图亚洲综合| 亚洲第一男人天堂| 亚洲神级电影国语版| 日本红怡院亚洲红怡院最新| 精品国产亚洲男女在线线电影|