赞
踩
本帖是个记录学习贴,学习下如何解析xml文档,百度搜索一番,得知通过dom4j包下的Document与Element可以实现对XML文档的解析(不管是简单的xml文档或是复杂嵌套的xml文档)。
Dom4j API文档:Dom4j
本文主要关注的两个接口:Document、Element
通过红框中的两个接口就可以完成对xml文档的解析。
我们新建个java工程,用来学习Dom4j,因为用到此jar包,所以提前将jar包下载下来,放入工程中。
附上dom4j-1.6.1jar包下载地址:点我
再放一个用来测试的xml文档:
- <?xml version="1.0" encoding="utf-8"?>
- <root>
- <head>
- <ErrCode>1</ErrCode>
- <ErrMsg>成功</ErrMsg>
- </head>
- <body>
- <detail>
- <UserName>小明1</UserName >
- <Type>药费单</Type>
- <TotalFee>121.50</TotalFee>
- <FeeItem>
- <ItemName>头孢XXX</ItemName>
- <ItemType>西药费</ItemType>
- <ItemFee>45.00</ItemFee>
- <MedicalFee>0</MedicalFee >
- <Unit>支</Unit >
- <Price>55.00</Price >
- <Type></Type >
- <Num>1</Num>
- </FeeItem>
- <FeeItem>
- <ItemName>包扎带</ItemName>
- <ItemType>材料费</ItemType>
- <ItemFee>21.50</ItemFee>
- <MedicalFee>0</MedicalFee >
- <Unit>支</Unit >
- <Price>55.00</Price >
- <Type></Type >
- <Num>1</Num>
- </FeeItem>
- </detail>
- <detail>
- <UserName>小明2</UserName>
- <Type>检查单</Type>
- <TotalFee>46.50</TotalFee>
- <FeeItem>
- <ItemName>血常规</ItemName>
- <ItemType>检验费</ItemType>
- <ItemFee>46.50</ItemFee>
- <MedicalFee>0</MedicalFee >
- <Unit>支</Unit >
- <Price>55.00</Price >
- <Type></Type >
- <Num>1</Num>
- </FeeItem>
- </detail>
- </body>
- </root>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
我们就以上面这个xml文档来解析,我把它命名文件名为:test.xml,放在我的E盘中,目录为:E:\test.xml
本文介绍两种获取document对象的方式:
下面分别对上面两种获取document对象的方式进行示例
第一种
- SAXReader reader = new SAXReader();
- Document doc = reader.read(new File("E:\\test.xml"));
第二种
- String xml = "<ItemName>头孢</ItemName>";
- Document doc = DocumentHelper.parseText(xml);
下面具体讲解解析的过程:(我们以第一种:读取本地xml文件的方式进行xml解析)
- public class Dom4j {
-
- @SuppressWarnings("unchecked")
- public static void main(String[] args) {
- try {
- SAXReader reader = new SAXReader();
- Document doc = reader.read(new File("E:\\test.xml")); //读取本地xml文件
- Element rootElement = doc.getRootElement(); // 获取document对象根节点,即最外层节点下的内容
- Element headElement = rootElement.element("head"); // 获取根节点下的所有节点,获得<head>下的内容
- System.out.println("[ErrCode] = " + headElement.elementText("ErrCode")); // 获取xml文档中标签为<ErrCode>的内容
- Element bodyElement = rootElement.element("body");
- List<Element> elList = bodyElement.elements("detail");
- for (Element element : elList) {
- System.out.println("[UserName] = " + element.elementText("UserName"));
- List<Element> feeItemElement = element.elements("FeeItem");
- for (Element element2 : feeItemElement) {
- System.out.println("[ItemType] = " + element2.elementText("ItemType")); //获取xml文档中标签为<ItemType>的内容
- }
- }
- } catch (DocumentException e) {
- e.printStackTrace();
- }
- }
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
以下是输出结果
- [ErrCode] = 1
- [UserName] = 小明1
- [ItemType] = 西药费
- [ItemType] = 材料费
- [UserName] = 小明2
- [ItemType] = 检验费
可以看到,xml文档中任意深度的指定标签内容都是可以读取到的,主要用到了以下几个方法:
getRootElement(),通过document对象的getRootElement()可以获得xml文档根节点下的内容
element(),通过element对象的element()可以获得指定子节点下的内容
elements(),通过element对象的elements()可以获得指定的子节点集合下的内容
elementText(),通过element对象的elementText()可以获得指定标签的内容
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。