XML文档解析包 Dom4j 简单使用

前端之家收集整理的这篇文章主要介绍了XML文档解析包 Dom4j 简单使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、摘要

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文档内容

  1. <RESULT>
  2. <CODE>1</CODE>
  3. <REMARK>返回成功</REMARK>
  4. <PHONES>
  5. <PHONEINFO id="1">
  6. <NAME>测试1</NAME>
  7. <NUMBER>11111111111</NUMBER>
  8. </PHONEINFO>
  9. <PHONEINFO id="2">
  10. <NAME>测试2</NAME>
  11. <NUMBER>12222222222</NUMBER>
  12. </PHONEINFO>
  13. </PHONES>
  14. </RESULT>
存放在android项目根目录/assets文件夹下,文件名:phones.xml

2. 下面将解析代码封装成方法

  1. /**
  2. * Dom4j解析xml文件
  3. */
  4. public static void startReadXmlFromFile(Context ctx) {
  5. Document doc = null;
  6. List<PhoneInfo> mList = null;
  7. try {
  8. // 读取并解析XML文档
  9. // SAXReader就是一个管道,用一个流的方式,把xml文件读出来
  10. //
  11. SAXReader reader = new SAXReader();
  12.  
  13. doc = reader.read(ctx.getAssets().open("phones.xml")); // phones.xml表示你要解析的xml文档
  14.  
  15. // 1. 获取根节点
  16. Element root = doc.getRootElement();
  17. Log.d("tag","根节点:" + root.getName()); // 输出名称
  18.  
  19. // 2. 获取根节点下指定的子节点 Phones
  20. Iterator iter = root.elementIterator("PHONES");
  21. if (iter.hasNext()) {
  22. // 3. 实例化集合
  23. mList = new ArrayList<PhoneInfo>();
  24. // 4. 指向重复子节点
  25. Element phonesEle = (Element) iter.next();
  26. Log.d("tag","节点:" + phonesEle.getName());
  27.  
  28. // 5. 遍历节点,获取数据
  29. for (Iterator iterator = phonesEle.elementIterator("PHONEINFO"); iterator
  30. .hasNext();) {
  31. Element phoneEle = (Element) iterator.next();
  32. // 6. phone属性
  33. int id = Integer.valueOf(phoneEle.attributeValue("id").toString());
  34. // 7. 获取phone子节点
  35. Iterator num = phoneEle.elementIterator("NUMBER");
  36. Element numEle = (Element) num.next();
  37. Iterator name = phoneEle.elementIterator("NAME");
  38. Element nameEle = (Element) name.next();
  39. // 8. 封装数据 (获取节点数据)
  40. PhoneInfo info = new PhoneInfo(id,nameEle.getText(),numEle.getText());
  41. Log.d("tag",info.toString());
  42. mList.add(info);
  43. }
  44. }
  45.  
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. }
  49. }

结果:
  1. 02-08 15:32:45.446: D/tag(25376): 根节点:RESULT
  2. 02-08 15:32:45.446: D/tag(25376): 节点:PHONES
  3. 02-08 15:32:45.446: D/tag(25376): id : 1,name: 测试1,number: 11111111111
  4. 02-08 15:32:45.446: D/tag(25376): id : 2,name: 测试2,number: 12222222222


3. 如果要解析xml字符串,只需要将字符串转换为xml即可
  1. // 下面的是通过解析xml字符串的
  2. doc = DocumentHelper.parseText(xml); // 将字符串转为XML

猜你在找的XML相关文章