一、摘要
DOM4J是dom4j.org出品的一个开源XML解析包,是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP
官方下载地址:http://www.dom4j.org/dom4j-1.6.1/
下载完成后的文档结构如下
直接导入dom4j-1.6.1.jar
二、使用
1. 提供的xml文档内容
<RESULT>
<CODE>1</CODE>
<REMARK>返回成功</REMARK>
<PHONES>
<PHONEINFO id="1">
<NAME>测试1</NAME>
<NUMBER>11111111111</NUMBER>
</PHONEINFO>
<PHONEINFO id="2">
<NAME>测试2</NAME>
<NUMBER>12222222222</NUMBER>
</PHONEINFO>
</PHONES>
</RESULT>
存放在android项目根目录/assets文件夹下,文件名:phones.xml
2. 下面将解析代码封装成方法
/**
* Dom4j解析xml文件
*/
public static void startReadXmlFromFile(Context ctx) {
Document doc = null;
List<PhoneInfo> mList = null;
try {
// 读取并解析XML文档
// SAXReader就是一个管道,用一个流的方式,把xml文件读出来
//
SAXReader reader = new SAXReader();
doc = reader.read(ctx.getAssets().open("phones.xml")); // phones.xml表示你要解析的xml文档
// 1. 获取根节点
Element root = doc.getRootElement();
Log.d("tag", "根节点:" + root.getName()); // 输出名称
// 2. 获取根节点下指定的子节点 Phones
Iterator iter = root.elementIterator("PHONES");
if (iter.hasNext()) {
// 3. 实例化集合
mList = new ArrayList<PhoneInfo>();
// 4. 指向重复子节点
Element phonesEle = (Element) iter.next();
Log.d("tag", "节点:" + phonesEle.getName());
// 5. 遍历节点,获取数据
for (Iterator iterator = phonesEle.elementIterator("PHONEINFO"); iterator
.hasNext();) {
Element phoneEle = (Element) iterator.next();
// 6. phone属性
int id = Integer.valueOf(phoneEle.attributeValue("id").toString());
// 7. 获取phone子节点
Iterator num = phoneEle.elementIterator("NUMBER");
Element numEle = (Element) num.next();
Iterator name = phoneEle.elementIterator("NAME");
Element nameEle = (Element) name.next();
// 8. 封装数据 (获取节点数据)
PhoneInfo info = new PhoneInfo(id, nameEle.getText(),
numEle.getText());
Log.d("tag", info.toString());
mList.add(info);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
结果:
02-08 15:32:45.446: D/tag(25376): 根节点:RESULT
02-08 15:32:45.446: D/tag(25376): 节点:PHONES
02-08 15:32:45.446: D/tag(25376): id : 1, name: 测试1, number: 11111111111
02-08 15:32:45.446: D/tag(25376): id : 2, name: 测试2, number: 12222222222
// 下面的是通过解析xml字符串的
doc = DocumentHelper.parseText(xml); // 将字符串转为XML