package cn.itcast.xml;

 import cn.itcast.domain.Book;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Before;
import org.junit.Test; import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; public class Dom4jDemo { private Document document; @Before
public void init() throws DocumentException {
SAXReader reader = new SAXReader();
InputStream is = Dom4jDemo.class.getClassLoader().getResourceAsStream("book.xml"); document = reader.read(is);
} @Test
public void parseMethod2() throws DocumentException {
//获取文档根元素,books
Element root = document.getRootElement(); //获取所有book元素
List<Element> bookElements = root.elements(); //解析所有book元素,并添加到books集合中
List<Book> books = new ArrayList<>(); for (Element bookElement : bookElements) {
//获取author属性值
String author = bookElement.attributeValue("author");
//获取子元素name的文本
String name = bookElement.element("name").getText();
//获取子元素price的文本
String priceStr = bookElement.element("price").getText();
double price = Double.parseDouble(priceStr);
//创建对应的book对象,并添加到books集合中
books.add(new Book(author, name, price));
} //打印
books.forEach(System.out::println); } @Test
public void parseMethod1() throws FileNotFoundException, DocumentException {
//获取根元素
Element root = document.getRootElement();
System.out.println(root.getName()); List<Book> books = new ArrayList<>(); //获取所有book元素,解析并保存到books集合中。
List<Node> bookNodes = document.selectNodes("/books/book");
for (Node bookNode : bookNodes) {
//获取作者
String author = bookNode.valueOf("@author");
// System.out.println(author); /*
斜杠开头表示文档,中间的斜杠则表示直接子节点
错误代码:
String name = bookNode.valueOf("/name");
表示选区文档下的name元素,而文档下只有books元素。
*/
//获取书名
List<Node> nameNodes = bookNode.selectNodes("name");
String bookName = nameNodes.get(0).getText();
// System.out.println(bookName); //获取价格
List<Node> priceNodes = bookNode.selectNodes("price");
double price = (double) Double.parseDouble(priceNodes.get(0).getText()); books.add(new Book(author, bookName, price));
} //打印结果
books.forEach(System.out::println);
}
}

Dom4jDemo.java

 package cn.itcast.domain;

 public class Book {
private String author;
private String name;
private Double price; public Book(){} public Book(String author, String name, Double price) {
this.author = author;
this.name = name;
this.price = price;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Double getPrice() {
return price;
} public void setPrice(Double price) {
this.price = price;
} @Override
public String toString() {
return "Book{" +
"author='" + author + '\'' +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}

Book.java

 <?xml version="1.0" encoding="UTF-8"?>
<books>
<book author="天蚕土豆">
<name>斗破苍穹</name>
<price>86</price>
</book>
<book author="萧潜">
<name>缥缈之旅</name>
<price>92</price>
</book>
<book author="萧鼎">
<name>诛仙</name>
<price>98</price>
</book>
<book author="天下霸唱">
<name>鬼吹灯</name>
<price>124</price>
</book>
<book author="辰东">
<name>神墓</name>
<price>128</price>
</book>
</books>

book.xml

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.itcast.xml-parser</groupId>
<artifactId>xml-parser-demo1</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency> <!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.6</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies> </project>

pom.xml

 package cn.itcast.xml;

 import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test; import java.util.List;
/*
作者:北冥有鱼_很好吃
链接:https://www.jianshu.com/p/806bb1bdc06f
*/
public class Dom4j_02{ @Test
public void parse() throws Exception {
// 1. 创建一个 saxReader 对象
SAXReader saxReader = new SAXReader();
// 2. 将数据读取到 document 对象中
Document document = saxReader.read(Dom4j_02.class.getClassLoader().getResourceAsStream("servlet.xml"));
// 3. 使用 document 对象调用 getRootElement 方法获取根标签, 返回 Element 接口实现类对象
Element rootElement = document.getRootElement();
// 4. 使用 rootElement 根标签对象调用 elements 方法, 传入 servlet, 获取servlet标签对象
List<Element> servletElements = rootElement.elements("servlet");
// 5. 遍历, 并获取该标签下的子标签数据内容, 使用父标签对象调用elementText方法, 传入子标签名称获取数据
for (Element servlet : servletElements) {
String name = servlet.elementText("servlet-name");
String cls = servlet.elementText("servlet-class");
System.out.println(name + " : " + cls);
}
// 使用 rootElement 根标签对象调用 elements 方法, 传入 servlet-mapping, 获取servlet-mapping标签对象
List<Element> mappingElements = rootElement.elements("servlet-mapping");
for (Element mapping : mappingElements) {
String name = mapping.elementText("servlet-name");
String url = mapping.elementText("url-pattern");
System.out.println(name + " = " + url);
}
}
}

Dom4j_02.java 解析servlet.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!--
作者:北冥有鱼_很好吃
链接:https://www.jianshu.com/p/806bb1bdc06f
-->
<servlets>
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>MyServlet1</servlet-class>
</servlet>
<servlet>
<servlet-name>servlet2</servlet-name>
<servlet-class>MyServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/s1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet2</servlet-name>
<url-pattern>/s2</url-pattern>
</servlet-mapping>
</servlets>

servlet.xml

最新文章

  1. JavaScript随笔1
  2. Linux 之 目录和文件
  3. [WPF实用技巧]如何使WPF的TreeView节点之间有连线
  4. 20套高品质的 Mobile &amp; Web 界面 PSD 素材免费下载
  5. 进军swift
  6. 关于man和help的区别
  7. VirtualBox centos 6.5 minimal 开启网络
  8. GITHUB使用简介
  9. mysql 不是主键不能删除的保护问题解决办法?
  10. 封装的多功能多效果的RecyclerView
  11. hadoop中汉字与英文字符混合的keyword做为combine的key的问题
  12. JDK动态代理实现机制
  13. Windows 性能搜集【perfmon】
  14. 浅谈最长上升子序列(LIS)
  15. Go Web:HttpRouter路由
  16. ClickHouse高可用集群的配置
  17. Tor源码阅读与改造(一)
  18. ubuntu更新提示/boot空间不足
  19. sublime text3:下载代码格式化插件和汉化插件
  20. IAR EWARM : Debugging with CMSIS-DAP

热门文章

  1. MVC+Ext.net零基础学习记录(四)
  2. hihocoder(第十周)二叉树(前序中序推后续)递推实现
  3. Contiki Process概述
  4. laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)
  5. Java企业微信开发_10_未验证域名归属,JS-SDK功能受限
  6. mysql一次性和多次取数据的性能测试
  7. java中interface 的特性
  8. 编写html页面时常见的问题(二)
  9. mysql备份并升级sql语句
  10. 批处理中格式化Date