一、摘要
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
/** * 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