当前位置:   article > 正文

使用Dom4j中的Document与Element解析XML文档_document elements解析文本

document elements解析文本

本帖是个记录学习贴,学习下如何解析xml文档,百度搜索一番,得知通过dom4j包下的Document与Element可以实现对XML文档的解析(不管是简单的xml文档或是复杂嵌套的xml文档)。

Dom4j API文档:Dom4j

本文主要关注的两个接口:Document、Element

通过红框中的两个接口就可以完成对xml文档的解析。

开始代码

我们新建个java工程,用来学习Dom4j,因为用到此jar包,所以提前将jar包下载下来,放入工程中。

附上dom4j-1.6.1jar包下载地址:点我

再放一个用来测试的xml文档:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <root>
  3. <head>
  4. <ErrCode>1</ErrCode>
  5. <ErrMsg>成功</ErrMsg>
  6. </head>
  7. <body>
  8. <detail>
  9. <UserName>小明1</UserName >
  10. <Type>药费单</Type>
  11. <TotalFee>121.50</TotalFee>
  12. <FeeItem>
  13. <ItemName>头孢XXX</ItemName>
  14. <ItemType>西药费</ItemType>
  15. <ItemFee>45.00</ItemFee>
  16. <MedicalFee>0</MedicalFee >
  17. <Unit></Unit >
  18. <Price>55.00</Price >
  19. <Type></Type >
  20. <Num>1</Num>
  21. </FeeItem>
  22. <FeeItem>
  23. <ItemName>包扎带</ItemName>
  24. <ItemType>材料费</ItemType>
  25. <ItemFee>21.50</ItemFee>
  26. <MedicalFee>0</MedicalFee >
  27. <Unit></Unit >
  28. <Price>55.00</Price >
  29. <Type></Type >
  30. <Num>1</Num>
  31. </FeeItem>
  32. </detail>
  33. <detail>
  34. <UserName>小明2</UserName>
  35. <Type>检查单</Type>
  36. <TotalFee>46.50</TotalFee>
  37. <FeeItem>
  38. <ItemName>血常规</ItemName>
  39. <ItemType>检验费</ItemType>
  40. <ItemFee>46.50</ItemFee>
  41. <MedicalFee>0</MedicalFee >
  42. <Unit></Unit >
  43. <Price>55.00</Price >
  44. <Type></Type >
  45. <Num>1</Num>
  46. </FeeItem>
  47. </detail>
  48. </body>
  49. </root>

我们就以上面这个xml文档来解析,我把它命名文件名为:test.xml,放在我的E盘中,目录为:E:\test.xml

本文介绍两种获取document对象的方式:

  • 读取本地xml文件获取document对象
  • 直接根据xml内容的字符串获取document对象

下面分别对上面两种获取document对象的方式进行示例

第一种

  1. SAXReader reader = new SAXReader();
  2. Document doc = reader.read(new File("E:\\test.xml"));

第二种

  1. String xml = "<ItemName>头孢</ItemName>";
  2. Document doc = DocumentHelper.parseText(xml);

下面具体讲解解析的过程:(我们以第一种:读取本地xml文件的方式进行xml解析)

  1. public class Dom4j {
  2. @SuppressWarnings("unchecked")
  3. public static void main(String[] args) {
  4. try {
  5. SAXReader reader = new SAXReader();
  6. Document doc = reader.read(new File("E:\\test.xml")); //读取本地xml文件
  7. Element rootElement = doc.getRootElement(); // 获取document对象根节点,即最外层节点下的内容
  8. Element headElement = rootElement.element("head"); // 获取根节点下的所有节点,获得<head>下的内容
  9. System.out.println("[ErrCode] = " + headElement.elementText("ErrCode")); // 获取xml文档中标签为<ErrCode>的内容
  10. Element bodyElement = rootElement.element("body");
  11. List<Element> elList = bodyElement.elements("detail");
  12. for (Element element : elList) {
  13. System.out.println("[UserName] = " + element.elementText("UserName"));
  14. List<Element> feeItemElement = element.elements("FeeItem");
  15. for (Element element2 : feeItemElement) {
  16. System.out.println("[ItemType] = " + element2.elementText("ItemType")); //获取xml文档中标签为<ItemType>的内容
  17. }
  18. }
  19. } catch (DocumentException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }

以下是输出结果

  1. [ErrCode] = 1
  2. [UserName] = 小明1
  3. [ItemType] = 西药费
  4. [ItemType] = 材料费
  5. [UserName] = 小明2
  6. [ItemType] = 检验费

可以看到,xml文档中任意深度的指定标签内容都是可以读取到的,主要用到了以下几个方法:

getRootElement(),通过document对象的getRootElement()可以获得xml文档根节点下的内容

element(),通过element对象的element()可以获得指定子节点下的内容

elements(),通过element对象的elements()可以获得指定的子节点集合下的内容

elementText(),通过element对象的elementText()可以获得指定标签的内容

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/817659
推荐阅读