采用dom4j解析xml过程

采用dom4j解析xml过程

2018年02月22日 20:42:31 riqi 阅读数:7314

dom4j是一个非常非常优秀的java xml api,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 java软件都在使用 dom4j来读写 xml,特别值得一提的是连 sun 的 jaxm也在用 dom4j。

如果项目中要添加dom4j类库支持,需要将工具包加载到项目类路径下,或采用maven包管理的话可以在pom.xml里边添加项目包依赖即可,如下:

 
  1. <dependency>

  2. <groupId>dom4j</groupId>

  3. <artifactId>dom4j</artifactId>

  4. <version>1.6.1</version>

  5. </dependency>

假如给定了一条xml字符串,需要将字符串里边的数据分别提取出来。这种情况在一些标准的api接口里边是很常见的,那么如何对xml字符串进行解析呢?

导入类库包:

import org.dom4j.DocumentHelper;

采用DocumentHelper#parseText()将xml字符串转换为Document对象,如下:

Document document = DocumentHelper.parseText(xmlStr);

假如给定的xml字符串为:

 
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <persons>

  3. <person gender="男性">

  4. <name>张三</name>

  5. <age>26</age>

  6. <email>zhangsan@gmail.com</email>

  7. <englishName>zhangsan</englishName>

  8. <website>zhangsan.com</website>

  9. </person>

  10. <person gender="男性">

  11. <name>李四</name>

  12. <age>27</age>

  13. <email>lisi@gmail.com</email>

  14. <englishName>lisi</englishName>

  15. <website>lisi.com</website>

  16. </person>

  17. <person gender="男性">

  18. <name>王五</name>

  19. <age>27</age>

  20. <email>wangwu@gmail.com</email>

  21. <englishName>wangwu</englishName>

  22. <website>wangwu.com</website>

  23. </person>

  24. </persons>

解析过程如下:

 
  1. List<HashMap<String, String>> personList = new ArrayList<HashMap<String, String>>();

  2. try {

  3. Document document = DocumentHelper.parseText(xmlStr);

  4.  
  5. Element rootElement = document.getRootElement();// 获取根节点

  6. for (Iterator<?> iterator = rootElement.elementIterator(); iterator.hasNext();) {

  7. Element element = (Element) iterator.next();

  8.  
  9. Map<String, String> personMap = new HashMap<String, String>();

  10.  
  11. Attribute genderAttr = element.attribute("gender");//获取元素的gender属性对象

  12. personMap.put("gender", StringUtils.trim(genderAttr.getValue()));// 获取属性对象的值并插入map中,键名为gender

  13.  
  14. for (Iterator<?> iterator2 = element.elementIterator(); iterator2.hasNext();) {

  15. Element element2 = (Element) iterator2.next();

  16.  
  17. personMap.put(element2.getName(), element2.getTextTrim());// 将子节点的名称和值分别插入map中

  18. }

  19. personList.add(personMap);//将map插入list中

  20. }

  21. } catch (DocumentException e) {

  22. e.printStackTrace();

  23. }

  24. System.out.println(personList);

打印结果如下:

[{englishName=zhangsan, website=zhangsan.com, email=zhangsan@gmail.com, age=26, name=张三, gender=男性}, {englishName=lisi, website=lisi.com, email=lisi@gmail.com, age=27, name=李四, gender=男性}, {englishName=wangwu, website=wangwu.com, email=wangwu@gmail.com, age=27, name=王五, gender=男性}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值