Dom4j解析XML學習代碼


項目截圖:注意導入紅色方框內的兩個jar包。

三個函數,一個用於創建xml文件,一個用於修改xml文件,一個用於格式化xml文件。

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

import org.dom4j.Attribute;
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 Dom4jXML {
    public static int createXMLFile(String filename){
        /*返回操作結果*/
        int returnValue = 0;
        /*建立document對象*/
        Document document = DocumentHelper.createDocument();
        /*建立XML文檔的根books*/
        Element booksElement = document.addElement("books");
        /*加入一行注釋*/
        booksElement.addComment("This is a test for dom4j, ZHe, 2012.11.26");
        /*加入第一個book節點*/
        Element bookElement = booksElement.addElement("book");
        /*加入show屬性內容*/
        bookElement.addAttribute("show", "yes");
        /*加入title節點*/
        Element titleElement = bookElement.addElement("title");
        /*為title設置內容*/
        titleElement.setText("Dom4j Tutorials");
        
        /*類似的完成后兩個book*/        
        bookElement = booksElement.addElement("book");
        bookElement.addAttribute("show", "yes");
        titleElement = bookElement.addElement("title");
        titleElement.setText("Lucene Studing");
        
        bookElement = booksElement.addElement("book");
        bookElement.addAttribute("show", "no");
        titleElement = bookElement.addElement("title");
        titleElement.setText("Lucene in Action");
        
        /*加入owner節點*/
        Element ownerElement = booksElement.addElement("owner");
        ownerElement.setText("Zhang He");
        
        try{
            /*將document中的內容寫入文件中*/
            XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
            writer.write(document);
            writer.close();
            /*執行成功,返回1*/
            returnValue = 1;
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
        return returnValue;        
    }
    public static int modifyXMLFile(String filename, String newfilename){
        int returnValue = 0;
        try{
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(new File(filename));
            
            /*修改內容之一:如果book結點中show屬性內容是yes,則修改成no*/
            
            /*先用xpath查找對象*/
            List list = document.selectNodes("/books/book/@show");
            Iterator iter = list.iterator();
            while(iter.hasNext()){
                Attribute attribute = (Attribute)iter.next();
                if(attribute.getValue().equals("yes")){
                    attribute.setValue("no");
                }
            }
            /*             * 
             *修改內容之二:把owner項內容改為CheeseZH
             * 並在owner節點中加入date節點,date節點的內容為2012-11-27
             * 還要為date節點添加一個屬性type
             */
            list = document.selectNodes("books/owner");
            iter = list.iterator();
            if(iter.hasNext()){
                Element ownerElement = (Element)iter.next();
                ownerElement.setText("CheeseZH");
                Element dateElement = ownerElement.addElement("date");
                dateElement.setText("2012-11-27");
                dateElement.addAttribute("type", "Gregoran calendar");
            }
            
            /*修改內容之三:若title內容為Dom4j Tutorials,則刪除該節點*/
            list = document.selectNodes("/books/book");
            iter = list.iterator();
            while(iter.hasNext()){
                Element bookElement = (Element)iter.next();
                Iterator iterator = bookElement.elementIterator("title");
                while(iterator.hasNext()){
                    Element titleElement = (Element)iterator.next();
                    if(titleElement.getText().equals("Dom4j Tutorials")){
                        bookElement.remove(titleElement);
                    }
                }
            }
            try{
                /*將document中的內容寫入文件中*/
                XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));
                writer.write(document);
                writer.close();
                
                /*執行成功,返回1*/
                returnValue = 1;
            }catch(Exception ex){
                ex.printStackTrace();
            }            
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return returnValue;
    }
    public static int formatXMLFile(String filename){
        int returnValue = 0;
        try{
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(new File(filename));
            XMLWriter writer = null;
            /*格式化輸出,類似IE瀏覽器一樣*/
            OutputFormat format = OutputFormat.createPrettyPrint();
            /*指定XML編碼*/
            format.setEncoding("GB2312");
            writer = new XMLWriter(new FileWriter(new File(filename)),format);
            writer.write(document);
            writer.close();
            /*執行成功,返回1*/
            returnValue = 1;
        }catch(Exception ex){
            
        }
        return returnValue;
    }
    public static void main(String[] args){
        createXMLFile("zhanghe.xml");
        modifyXMLFile("zhanghe.xml","CheeseZH.xml");
        formatXMLFile("zhanghe.xml");
    }

}

1.創建Document對象(xml對象),用addElement添加根節點(Element對象);

2.Element對象三個重要方法:

addComment:添加注釋

addAttribute:添加屬性

addElement:添加子元素

3.XMLWriter用於生成物理文件,默認使用OutputFormat類的createCompactFormat(),可以使用createPrettyPrint()

4.List list = document.selectNodes("/books/book");是通過xpath查找相應內容

關於Xpath語法,可以參考:http://www.cnblogs.com/CheeseZH/archive/2012/11/28/2791983.html

5.setValue(),setText()可以修改結點內容,remove()可以刪除結點或者屬性

6.OutputFormat format = OutputFormat.createPrettyPrint();指定了格式化方式為縮進式,而非緊湊式;

   format.setEncoding("GB2312");用於指定編碼

   之后的XMLWriter生成物理文件時,多了一個OutputFormat對象作為參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM