Java XML解析之DOM

來源:互聯網
上載者:User

標籤:

DOM解析是官方提供的XML解析方式之一,使用時無需引入第三方包,代碼編寫簡單,方便修改樹結構,但是由於DOM解析時是將整個XML檔案載入到記憶體中進行解析,因此當XML檔案較大時,使用DOM解析效率會降低,而且可能造成記憶體溢出。當XML檔案較大時應採用SAX解析(下一篇中會介紹)。通常情況下,若XML檔案只是用作系統的設定檔,檔案一般不會很大,使用DOM解析基本就能解決問題。 以下分別是解析和產生xml的基本步驟: 1. XML解析:上文已經說過DOM解析時是將整個XML檔案載入到記憶體中,所以解析的第一步就是負載檔案,需要用到以下代碼:
1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();2 DocumentBuilder builder = factory.newDocumentBuilder();3 Document document = builder.parse(in);// 參數有多種類型,在此例中選擇的是InputStream類型的參數

這三行代碼分別是建立解析器工廠,建立解析器,擷取解析的XML文檔樹,之後就可以對document對象進行具體的操作。

其中的主要操作大概有以下幾種:
1 Element root = document.getDocumentElement();// 擷取文檔的根節點2 NodeList nodeList = document.getElementsByTagName("nodename");// 根據節點名稱擷取節點列表

然後再迴圈遍曆nodeList中的節點,利用節點對象的getChildNodes()的方法擷取子節點列表,直到取到所需要的節點。

解析注意點:Dom解析會將xml中兩個標籤之間的所有內容都看成是子節點,包括空白,其中節點類型分為:
1. 帶有標籤的子節點看成Element類型的子節點2. 不包含標籤的空白子節點或者文位元組點看成是text類型的子節點
擷取節點值時,必須擷取text類型的節點的值,而不是Element類型節點的值,Element節點的值永遠都是null,也可以使用Element節點的getTextContent()來擷取Element類型的節點值所以,在遍曆子節點時,需要做 nodeList.item(i).getNodeType() == Element.ELEMENT_NODE 這樣的一次判斷,若為true,則執行 nodeList.item(i).getTextContent() 來擷取節點的值。 2. XML產生:首先是建立一個Document對象,需要用到以下代碼:
1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();2 DocumentBuilder builder = factory.newDocumentBuilder();3 Document document = builder.newDocument();

然後是document對象的配置以及節點的建立和添加:

1 document.setXmlStandalone(true); //非必須配置,配置之後可以去除不必要的standalone屬性2 Element root = document.createElement("nodes"); // 建立文檔根節點3 document.appendChild(root);// 將根節點加入文檔中

建立子節點,添加id屬性,並加入根節點中,xml中節點的父子關係是通過節點的appendChild方法形成的。

1 Element node = document.createElement("node");// 建立子節點2 node.setAttribute("id", "1"); // 為子節點添加屬性3 root.appendChild(node); // 將子節點加入到根節點中

當節點設定完成之後需要將document對象轉換成xml檔案,需要通過以下代碼轉換:

1 TransformerFactory factory = TransformerFactory.newInstance(); // 工廠類,用來擷取轉換對象2 Transformer transformer = factory.newTransformer(); // 擷取用於轉換的對象3 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 設定文檔自動換行4 transformer.transform(new DOMSource(document), new StreamResult( new File("E:\\nodes.xml")));// 實現轉換,需要將轉換的來源物件與目標檔案封裝一下
至此,通過DOM完成了XML檔案的產生。 DOM解析與建立XML的基本步驟也就是以上這麼多,這是我學習之後的總結,希望對需要學習這方面知識的朋友能有些許協助。

Java XML解析之DOM

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.