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的值.
展开阅读全文

没有更多推荐了,返回首页