Java:簡單的解析XML文件之使用DOM解析

XML簡介

要理解XML,HTML等格式,先來理解文檔對象模型DOM

  

根據 DOM,HTML 文檔中的每個成分都是一個節點,這些節點組成了一棵樹。
DOM 是這樣規定的:
整個文檔是一個文檔節點
每個 HTML 標籤是一個元素節點
包含在 HTML 元素中的文本是文本節點
每一個 HTML 屬性是一個屬性節點
註釋屬於註釋節點

節點彼此都有等級關係。HTML 文檔中的所有節點組成了一個文檔樹(或節點樹)。HTML 文檔中的每個元素、屬性、文本等都代表着樹中的一個節點。樹起始於文檔節點,並由此繼續伸出枝條,直到處於這棵樹最低級別的所有文本節點爲止。

DOM將整個XML文件加載到內存中,並構建出節點樹;應用程序可以通過遍歷節點樹的方式來解析XML文件中的各個節點、屬性等信息;
這種方式便於對XML節點的添加修改等,而且解析也很方便,然後它比較耗費內存,解析速度也不快

現在主要流行的是sax,dom4j和jdom

這章主要說使用DOM來解析

而使用DOM解析XML是有步驟的

1、創建解析器工廠對象 DocumentBuildFactory對象

2、由解析器工廠對象創建解析器對象,即DocumentBuilder對象

3、由解析器對象對指定XML文件進行解析,構建相應的DOM樹,創建Document對象,生成一個Document對象

4、以Document對象爲起點對DOM樹的節點進行查詢

5、使用Document的getElementsByTagName方法獲取元素名稱,生成一個NodeList集合,

6、遍歷集合


DocumentBuilderFactory factroy = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factroy.newDocumentBuilder();
Document document = builder.parse("pets.xml");
NodeList lists = document.getElementsByTagName("dog");
System.out.println("chengmuzhe養的狗狗的初始化信息");

        for (int i = 0; i < lists.getLength(); i++) {
            Node pet = lists.item(i);
            for (Node node = pet.getFirstChild(); node != null; node = node
                    .getNextSibling()) {
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    String name = node.getNodeName();
                    String value = node.getFirstChild().getNodeValue();
                    System.out.println(name + ":" + value + "\t");
                }
            }
        }
        NodeList lists1 = document.getElementsByTagName("penguin");
        System.out.println("chengmuzhe養的企鵝的初始化信息");

        for (int i = 0; i < lists1.getLength(); i++) {
            Node pet = lists1.item(i);
            for (Node node = pet.getFirstChild(); node != null; node = node
                    .getNextSibling()) {
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    String name = node.getNodeName();
                    String value = node.getFirstChild().getNodeValue();
                    System.out.println(name + ":" + value + "\t");
                }
            }
        }

    } catch (Exception e) {
        // TODO: handle exception
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章