一、Dom4j 技术概述
先是 Jdom 在 dom 基础上进行了封装,而 dom4j 又对 jdom 进行了封装。
DOM4J是一个开源的,基于Java的库来解析XML文档,它具有高度的灵活性,高性能和内存效率的API。这是java的优化,使用Java集合像列表和数组。它可以使用DOM,SAX,XPath和XSLT。它解析大型XML文档时具有极低的内存占用。
二、DOM4j 类库
1、类库
官网下载需要的 jar 包:Dom4J官网
2、使用
三、DOM4j 解析步骤
步骤:
1、先加载 xml 文件创建 Document 对象
2、通过 Document 对象拿到根元素对象
3、通过根元素.elelemts(标签名); 可以返回一个集合, 这个集合里放着。 所有你指定的标签名的元素对象
4、获取需要操作的元素,进行相应的操作
XML 文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <books> 3 <book sn="123"> 4 <name>Java</name> 5 <price>9.9</price> 6 <author>老张</author> 7 </book> 8 <book sn="456"> 9 <name>Python</name> 10 <price>99.99</price> 11 <author>老李</author> 12 </book> 13 </books>
测试解析文件:
1 /* 2 * dom4j 获取 Documet 对象 3 */ 4 @Test 5 public void getDocument() throws DocumentException { 6 // 要创建一个 Document 对象, 需要我们先创建一个 SAXReader 对象 7 SAXReader reader = new SAXReader(); 8 // 这个对象用于读取 xml 文件, 然后返回一个 Document。 9 Document document = reader.read("src/books.xml"); 10 // 打印到控制台, 看看是否创建成功 11 System.out.println(document); 12 }
解析XML文件:
1 /* 2 * 读取 xml 文件中的内容 3 */ 4 @Test 5 public void readXML() throws DocumentException { 6 // 需要分四步操作: 7 // 第一步, 通过创建 SAXReader 对象。 来读取 xml 文件, 获取 Document 对象 8 // 第二步, 通过 Document 对象。 拿到 XML 的根元素对象 9 // 第三步, 通过根元素对象。 获取所有的 book 标签对象 10 // 第四步, 遍历每个 book 标签对象。 然后获取到 book 标签对象内的每一个元素, 再通过 getText() 方法拿到起始标签和结束标签之间的文本内容 11 // 第一步, 通过创建 SAXReader 对象。 来读取 xml 文件, 获取 Document 对象 12 SAXReader reader = new SAXReader(); 13 Document document = reader.read("src/books.xml"); 14 // 第二步, 通过 Document 对象。 拿到 XML 的根元素对象 15 Element root = document.getRootElement(); 16 // 打印测试 17 // Element.asXML() 它将当前元素转换成为 String 对象 18 // System.out.println( root.asXML() ); 19 // 第三步, 通过根元素对象。 获取所有的 book 标签对象 20 // Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合 21 List<Element> books = root.elements("book"); 22 // 第四步, 遍历每个 book 标签对象。 然后获取到 book 标签对象内的每一个元素, 23 for (Element book : books) { 24 // 测试 25 // System.out.println(book.asXML()); 26 // 拿到 book 下面的 name 元素对象 27 Element nameElement = book.element("name"); 28 // 拿到 book 下面的 price 元素对象 29 Element priceElement = book.element("price"); 30 // 拿到 book 下面的 author 元素对象 31 Element authorElement = book.element("author"); 32 // 再通过 getText() 方法拿到起始标签和结束标签之间的文本内容 33 System.out.println("书名" + nameElement.getText() + " , 价格:" 34 + priceElement.getText() + ", 作者: " + authorElement.getText()); 35 } 36 }