1. 程式人生 > >Dom4j解析xml檔案的簡單快速用法

Dom4j解析xml檔案的簡單快速用法

1. 介紹

使用Dom4j解析xml檔案,需要用到的jar包是:dom4j-1.6.1.jar,下載地址:點我前往

以讀取以下test.xml測試檔案為例簡單說明其用法:
此檔案是WebXml.com.cn 中文<->英文雙向翻譯WEB服務開發介面以GET方式呼叫Translator函式返回的xml文件。查詢的關鍵詞是 “good”

test.xml :

<?xml version="1.0" encoding="UTF-8"?>
<DataSet xmlns="http://WebXml.com.cn/">
    <xs:schema xmlns
="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="Dictionary">
<xs:element name="Dictionary" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs
="0" maxOccurs="unbounded">
<xs:element name="Trans"> <xs:complexType> <xs:sequence> <xs:element name="WordKey" type="xs:string" minOccurs
="0" />
<xs:element name="Pron" type="xs:string" minOccurs="0" /> <xs:element name="Info" type="xs:string" minOccurs="0" /> <xs:element name="Translation" type="xs:string" minOccurs="0" /> <xs:element name="Mp3" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Refer"> <xs:complexType> <xs:sequence> <xs:element name="Rel" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Sentence"> <xs:complexType> <xs:sequence> <xs:element name="Orig" type="xs:string" minOccurs="0" /> <xs:element name="Trans" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <Dictionary xmlns=""> <Trans diffgr:id="Trans1" msdata:rowOrder="0"> <WordKey>good</WordKey> <Pron>gʊd</Pron> <Info /> <Translation>n. 善行,好處;adj. 好的,優良的,上等的;[pl.]商品</Translation> <Mp3>1033.mp3</Mp3> </Trans> <Sentence diffgr:id="Sentence1" msdata:rowOrder="0"> <Orig>My one good suit is at the cleaner's.</Orig> <Trans>我那套講究的衣服還在洗衣店裡呢。</Trans> </Sentence> <Sentence diffgr:id="Sentence2" msdata:rowOrder="1"> <Orig>He was very good to me when I was ill.</Orig> <Trans>我生病時他幫了我的大忙。</Trans> </Sentence> <Sentence diffgr:id="Sentence3" msdata:rowOrder="2"> <Orig>This is a good place for a picnic.</Orig> <Trans>這是一個野餐的好地方。</Trans> </Sentence> </Dictionary> </diffgr:diffgram> </DataSet>

1. 首先讀取XML檔案,獲取Document物件。

SAXReader reader = new SAXReader();
reader.setEncoding("utf-8");
//待解析的檔案放在工程目錄下的src資料夾下
Document document = reader.read(new File("src/test2.xml"));

2. 然後獲取根標籤

//此處是<DataSet></DataSet>
Element root = document.getRootElement();

3.再沿著路徑依次找到要獲取的標籤

由xml檔案可知,要想獲取查詢後的資訊,即單詞good的翻譯,需要找到Trans、Sentence標籤,然後再獲取其中的值。

而從根標籤到Trans標籤的路徑是:DataSet–>diffgram–>Dictionary–>Trans
同理,從根標籤獲取Sentence標籤的路徑是:DataSet–>diffgram–>Dictionary–>Sentence

//依次找到各標籤
Element elDif = root.element("diffgram");//得到diffgram標籤,
Element elDic = elDif.element("Dictionary");//得到Dictionary標籤
Element elTrans = elDic.element("Trans");//得到Trans標籤

注意 找 <diffgr:diffgram >標籤時,標籤名是diffgram,而不是diffgr,或者diffgr:diffgram 。

4.獲取的標籤內的值

//獲取TransModel中子標籤的各個值
String wordKey = elTrans.element("WordKey").getStringValue();
String Pron = elTrans.element("Pron").getStringValue();
String Info = elTrans.element("Info").getStringValue();
String Tran=elTrans.element("Translation").getStringValue();
String Mp3 = elTrans.element("Mp3").getStringValue();

至此,完成了解析xml檔案,獲取其中特定值的流程。

總結

使用Dom4j解析xml檔案用到的常用方法為:

//獲取Document物件(解析xml檔案時)
Document doc = reader.read(new File("src/test2.xml"));
//或者
//獲取Document物件(解析xml字串時)
Document doc = DocumentHelper.parseText(xmlStr); 
//得到xml根標籤
Element root = document.getRootElement();
//找到某一標籤
Element element = root.element("標籤名");
//獲得標籤值
String value = element.getStringValue();
//也可以用
String value = element.getText();

其他方法:

//獲取標籤名
String elName = element.getName();
//取得某節點下的某屬性
Element root=document.getRootElement();

// 獲取屬性
Attribute attribute=root.attribute("size");

//取得屬性的名
String text=attribute.getText();

//取得屬性的值
String text=attribute.getText();

//也可以用:
String text2=root.element("name").attributeValue("firstname");
//這個是取得根節點下name位元組點的屬性firstname的值.