您的位置:首页 > 其它

Dom4j解析xml文件的简单快速用法

2017-07-09 19:20 411 查看

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的值.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml dom