一、摘要
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文档内容
存放在android项目根目录/assets文件夹下,文件名:phones.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>
- /**
- * 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