Java中使用DOM方法解析XML檔案
阿新 • • 發佈:2018-12-07
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工程訓練可以鍛鍊好自己的基礎程式設計能力,如本部落格有不足之處還請大家指正。