Java操作XML—DOM4J簡介

來源:互聯網
上載者:User

一、DOM4J簡介 

  DOM4J是dom4j.org出品的一個開源XML解析包,DOM4J最大的特色是使用大量的介面,這也是它被認為比JDOM靈活的主要原因。它的主要介面都在org.dom4j這個包裡定義:

 Attribute  定義了XML屬性
 Branch  Branch為能夠包含子節點的節點如XML元素(Element)和文檔(Docuemnts)定義了一個公用的行為
 CDATA  定義了XML CDATA 地區
 CharacterData  CharacterData是一個標識借口,標識基於字元的節點。如CDATA,Comment, Text.
 Comment  Comment 定義了XML注釋的行為
 Document  定義了XML文檔
 DocumentType  DocumentType 定義XML DOCTYPE聲明
 Element  Element定義XML 元素
 ElementHandler  ElementHandler定義了 Element 對象的處理器
 ElementPath  被 ElementHandler 使用,用於取得當前正在處理的路徑層次資訊
 Entity  Entity定義 XML entity
 Node  Node為所有的dom4j中XML節點定義了多態行為
 NodeFilter  NodeFilter 定義了在dom4j節點中產生的一個濾鏡或謂詞的行為(predicate)
 ProcessingInstruction  ProcessingInstruction 定義 XML 處理指示.
 Text  Text 定義XML 常值節點.
 Visitor  Visitor 用於實現Visitor模式.
 XPath  XPath 在分析一個字串後會提供一個XPath 運算式

介面之間的繼承關係如下所示:

  • interface java.lang.Cloneable
    • interface org.dom4j.Node
      • interface org.dom4j.Attribute
      • interface org.dom4j.Branch
        • interface org.dom4j.Document
        • interface org.dom4j.Element 
      • interface org.dom4j.CharacterData
        • interface org.dom4j.CDATA
        • interface org.dom4j.Comment
        • interface org.dom4j.Text
      • interface org.dom4j.DocumentType
      • interface org.dom4j.Entity
      • interface org.dom4j.ProcessingInstruction

二、使用樣本

1。讀取並解析XML文檔

  讀寫XML文檔主要依賴於org.dom4j.io包,其中提供DOMReader和SAXReader兩類不同方式,而調用方式是一樣的。

// 從檔案讀取XML,輸入檔案名稱,返回XML文檔

    public Document read(String fileName) throws MalformedURLException, DocumentException {

       SAXReader reader = new SAXReader();

       Document document = reader.read(new File(fileName));

       return document;

    }

其中,reader的read方法是重載的,可以從InputStream, File, Url等多種不同的源來讀取。得到的Document對象就代表了整個XML。注意讀取的字元編碼是按照XML檔案頭定義的編碼來轉換。

2。取得ROOT結點

一切XML分析都是從Root元素開始的。

public Element getRootElement(Document doc){

       return doc.getRootElement();

    }

3。遍曆XML樹

DOM4J提供至少3種遍曆節點的方法:

1) 枚舉(Iterator)

// 枚舉所有子節點

    for ( Iterator i = root.elementIterator(); i.hasNext(); ) {

       Element element = (Element) i.next();

       // do something

    }

    // 枚舉名稱為foo的節點

    for ( Iterator i = root.elementIterator(foo); i.hasNext();) {

       Element foo = (Element) i.next();

       // do something

    }

    // 枚舉屬性

    for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {

       Attribute attribute = (Attribute) i.next();

       // do something

    }

2)遞迴

 public void treeWalk() {

       treeWalk(getRootElement());

    }

    public void treeWalk(Element element) {

       for (int i = 0, size = element.nodeCount(); i < size; i++)     {

           Node node = element.node(i);

           if (node instanceof Element) {

              treeWalk((Element) node);

           } else { // do something....

           }

       }

}
3) Visitor模式

Visitor是GOF設計模式之一。其主要原理就是兩種類互相保有對方的引用,並且一種作為Visitor去訪問許多Visitable。只需要自定一個類實現Visitor介面即可。

public class MyVisitor extends VisitorSupport {

           public void visit(Element element){

               System.out.println(element.getName());

           }

           public void visit(Attribute attr){

               System.out.println(attr.getName());

           }

        }
 調用:  root.accept(new MyVisitor())

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.