1. 程式人生 > >Java中使用DOM方法解析XML檔案

Java中使用DOM方法解析XML檔案

Java中使用DOM方法解析XML檔案

1、簡介

XML現在已經成為一種通用的資料交換格式,平臺的無關性使得很多場合都需要用到XML,本部落格將介紹用DOM方法解析XML檔案的方法,DOM解析是將XML檔案全部載入到記憶體,組裝成一顆DOM樹,然後通過節點以及節點之間的關係來解析XML檔案。


2、基本任務和程式碼

1)任務內容
使用DOM方法解析以下XML檔案:

<?xml version='1.0' encoding='gb2312' ?>
<root>
<hang>
<產品唯一ID>產品唯一ID</產品唯一ID
>
<通用名>通用名</通用名> <商品名>商品名</商品名> <劑型>劑型</劑型> <批准文號>批准文號</批准文號> <規格>規格</規格> <包裝說明>包裝說明</包裝說明> <包裝單位>包裝單位</包裝單位> <生產企業>生產企業</生產企業> <大包裝轉換比>大包裝轉換比</大包裝轉換比> <中包裝轉換比>中包裝轉換比</中包裝轉換比> <備註>備註</備註
>
<庫存>庫存</庫存> <供應價>供應價</供應價> <是否上架>是否上架</是否上架> </hang> <hang> <產品唯一ID>a121</產品唯一ID> <通用名>b12</通用名> <商品名>c231</商品名> <劑型>dewrwer</劑型> <批准文號>e324324</批准文號> <規格>f45645</規格> <包裝說明>g4543</包裝說明
>
<包裝單位>hq324e2</包裝單位> <生產企業>i76</生產企業> <大包裝轉換比>j453</大包裝轉換比> <中包裝轉換比>k4r43r</中包裝轉換比> <備註>le4tr4</備註> <庫存>mq3e2</庫存> <供應價>nefrw</供應價> <是否上架>o56</是否上架> </hang> </root>

2)任務程式碼
使用DOM解析XML檔案步驟:
step1、建立解析器工廠物件 DocumentBuildFactory;
step2、由解析器工廠物件建立解析器物件DocumentBuilder;
step3、由解析器物件對指定XML檔案進行解析,構建相應的DOM樹,建立Document物件;
step4、以Document物件為起點對DOM樹的節點進行查詢;
step5、使用Document的getElementsByTagName方法獲取元素名稱,生成一個NodeList集;
step6、遍歷集合;

任務程式碼如下:

import java.io.*;//匯入java.io包下的所有類
import org.w3c.dom.*;//使用org.w3c.dom操作XML檔案 
import org.xml.sax.SAXException;//使用org.xml.sax.SAXException讀取檔案
import javax.xml.parsers.*; //匯入 javax.xml.parsers包下的所有類
public class Test{//類名
    public static void main(String[] args){//程式主入口函式,帶命令列引數
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//建立DOM模式的解析器工廠物件
        try{//try程式碼塊,當發生異常時會轉到catch程式碼塊中
            DocumentBuilder builder=factory.newDocumentBuilder();//得到一個DOM解析器物件  
            Document doc=builder.parse(new File("D:\\test\\XML.xml"));//開啟指定路徑下的xml檔案  
            NodeList nl=doc.getElementsByTagName("hang");//獲得<hang>檔案的值  
            for (int i=0; i < nl.getLength(); i++){//for迴圈的條件
                System.out.println(doc.getElementsByTagName("產品唯一ID").item(i)
                        .getFirstChild().getNodeValue());//獲取“產品唯一ID”的資訊   
                System.out.println(doc.getElementsByTagName("通用名").item(i)  
                        .getFirstChild().getNodeValue());//獲取“通用名”的資訊   
                System.out.println(doc.getElementsByTagName("商品名").item(i)  
                        .getFirstChild().getNodeValue());//獲取“商品名”的資訊   
                System.out.println(doc.getElementsByTagName("劑型").item(i)  
                        .getFirstChild().getNodeValue());//獲取“劑型”的資訊 
                System.out.println(doc.getElementsByTagName("批准文號").item(i)  
                        .getFirstChild().getNodeValue());//獲取“批准文號”的資訊 
                System.out.println(doc.getElementsByTagName("規格").item(i)  
                        .getFirstChild().getNodeValue());//獲取“規格”的資訊 
                System.out.println(doc.getElementsByTagName("包裝說明").item(i)  
                        .getFirstChild().getNodeValue());//獲取“包裝說明”的資訊 
                System.out.println(doc.getElementsByTagName("包裝單位").item(i)  
                        .getFirstChild().getNodeValue());//獲取“包裝單位”的資訊 
                System.out.println(doc.getElementsByTagName("生產企業").item(i)  
                        .getFirstChild().getNodeValue());//獲取“生產企業”的資訊 
                System.out.println(doc.getElementsByTagName("大包裝轉換比").item(i)  
                        .getFirstChild().getNodeValue());//獲取“大包裝轉換比”的資訊 
                System.out.println(doc.getElementsByTagName("中包裝轉換比").item(i)  
                        .getFirstChild().getNodeValue());//獲取“中包裝轉換比”的資訊 
                System.out.println(doc.getElementsByTagName("備註").item(i)  
                        .getFirstChild().getNodeValue());//獲取“備註”的資訊 
                System.out.println(doc.getElementsByTagName("庫存").item(i)  
                        .getFirstChild().getNodeValue());//獲取“庫存”的資訊 
                System.out.println(doc.getElementsByTagName("供應價").item(i)  
                        .getFirstChild().getNodeValue());//獲取“供應價”的資訊 
                System.out.println(doc.getElementsByTagName("是否上架").item(i)  
                        .getFirstChild().getNodeValue());//獲取“是否上架”的資訊 
                System.out.println();//輸出空字元進行格式調整
                }
            }
        catch (ParserConfigurationException e){//當try程式碼塊有異常時轉到catch程式碼塊
            e.printStackTrace();//在命令列列印異常資訊出錯的位置及原因
            }
        catch (SAXException e){//當try程式碼塊有異常時轉到catch程式碼塊
            e.printStackTrace();//在命令列列印異常資訊出錯的位置及原因
            }
        catch (IOException e){//當try程式碼塊有異常時轉到catch程式碼塊
            e.printStackTrace();//在命令列列印異常資訊出錯的位置及原因  
            }
      }
} 

3)執行結果
這裡寫圖片描述


3、總結

Java中除了DOM方法可以解析XML檔案外,還可以使用SAX、JDOM、DOM4J等方法,我也會在之後的學習中嘗試使用這些方法,我認為通過Java工程訓練可以鍛鍊好自己的基礎程式設計能力,如本部落格有不足之處還請大家指正。