天天看點

XML檔案讀取——DOM方式

  1. XML檔案的存儲

    XML檔案是以樹的結構存儲的,一個XML檔案就是一個倒着的樹,有一個根節點。根節點下有好多個子節點,然後節點有自己的屬性,在标簽中和标簽名空一格添加屬性(屬性也可以作為節點的子節點進行存儲,但是這樣不符合正常,屬性還是和節點放在一起的),然後子節點下也可以添加一些子節點。

  2. 為什麼要使用XML檔案

    不同應用程式之間的通信——例如訂票軟體和支付軟體之間的通信,不同軟體之間的實作方式不一樣

    不同平台之間的通信——例如mac os 和windows之間的通信

    不同平台間資料的共享——例如各個網站和手機app之間需要資料共享

    是以XML檔案的一個主要作用就是用相同的XML檔案把不同的程式,平台連接配接起來

  3. XML檔案的解析——擷取XML檔案的内容

    解析XML檔案的目的:擷取節點名、節點值、屬性名、屬性值

    四種解析方式:DOM、SAX、DOM4J、JDOM。

    解析目标:解析XML檔案後,java程式能夠得到XML檔案的所有資料。

    java中如何保留xml結構

  4. DOM解析

    準備工作:

    建立一個DocumentBuilderFactory對象,這裡建立時使用的是反射機制

    建立一個DocumentBuilder的對象,用上面建立的類來建立

    通過DocumentBuilder對象的parse(String fileName)方法來加載xml檔案到目前項目下,parse()方法解析後傳回的是Document類型的對象,Document導入的是w3c下的

    解析(包括解析屬性值,解析節點名稱和節點值):

    Document類有一個方法是getElementsByTagName(),通過标簽名來擷取想要的節點,傳回一個NodeList類型,傳回的不是一個值,而是所有該标簽的節點

    周遊上面獲得的每個節點,NodeList有一個getLength()方法可以獲得所有該标簽節點的數目;NodeList中有一個item(int i)方法擷取每個節點(注:NodeList的節點值從0開始),對于擷取到的每個節點來進行周遊,item()的傳回值是Node類型;Node有一個getAttributes()方法來擷取該節點的屬性值,其傳回值是NamedNodeMap類型資料,NamedNodeMap是存儲所有節點屬性的一個集合(也可以是一個Map);對擷取到的屬性進行周遊,用item(int i)來周遊每一個屬性,傳回一個Node類型的值,Node類型有getNodeName()擷取屬性名,getNodeValue()擷取屬性值。(如果知道某個節點隻有一個屬性,并且知道屬性名,那用NodeList中的item(int i)方法直接獲得該節點,強制類型轉換傳回Element類型,然後用Element中的getAttribute(“屬性名”)的方法來獲得屬性值)

    解析節點名和節點值。擷取子節點,Node有一個getChildNodes()方法來獲得子節點,傳回類型是NodeList.NodeList中用item()方法來獲得子節點,getNodeName()獲得子節點的名稱,(會把xml中的空格和換行當成Text類型的節點也會計入,是以要區分text類型和element類型的Node,用item(int i)的getNodeType()方法獲得節點類型是否是Element類型,Node.ELEMENT_NODE),擷取節點值要先用item(int i).getfirstChild().getNodeValue(),因為這裡節點值被當做子節點的子節點。getTextContext()方法也可以擷取節點值,和上面方法的差別在于,如果該節點還有子節點的話,getTextContent()方法會獲得子節點的值和該節點的值,而getFirstChild()方法獲得是該節點 的第一個子節點的value, 為null,因為element類型的節點值是null