Dom4j解析xml檔案的簡單快速用法
阿新 • • 發佈:2019-02-19
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的值.