標籤:
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