2.2 Dom4j的基本使用
目标
- 知道了什么是XML的解析, 那么接下来我们来学习一个最为简单常见的解析开发包 - Dom4j
路径
- DOM解析原理及结构模型
- 常用的方法
- 方法演示
讲解
2.2.1 DOM解析原理及结构模型
- 解析原理 XML DOM 和 HTML DOM一样,XML DOM 将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作。以下面books.xml文档为例。
`
``java
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="0001">
<name>JavaWeb开发教程</name>
<author>刘亦菲</author>
<sale>100.00元</sale>
</book>
<book id="0002">
<name>王宝强</name>
<author>刘洋</author>
<sale>100.00元</sale>
</book>
</books>
> 结构模型
> ![在这里插入图片描述](https://img-blog.csdnimg.cn/202101042029418.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Z1X2hvdXFpbmc=,size_16,color_FFFFFF,t_70DOM中的核心概念就是节点,在XML文档中的元素、属性、文本,在DOM中都是节点!所有的节点都封装到了Document对象中。
> 2.2.2 使用步骤
>
> > 1. 导入jar包 dom4j-1.6.1j.jar
> > 2. 创建解析器
> > 3. 读取xml 获得document对象
> > 4. 得到根元素
> > 5. 根据根元素获取对于的子元素或者属性
>
> 2.2.3 常用的方法
> 1.创建解析器对象: SAXReader sr = new SAXReader();
> 2.读取xml文件进行解析,生成Document对象---使用SAXReader方法
> Document read(String fileName);
> 3.使用Document对象获取根元素
> Element getRootElement();
> 4.使用元素获取子元素--->使用Element方法
> public List elements() : 获取当前元素的所有子元素
> public String getName() : 获取元素的元素名
> public String getText() : 获取当前元素的文本值
> public String attributeValue(String name) : 获取当前元素下某个属性的值,传入属性名
> public Element element(String name) : 根据元素名获取指定子元素(如果有多个就获取到第一个)
> public String elementText(String name) : 获取指定子元素的文本值,参数是子元素名称
> 2.2.4 方法演示
>
> - xml public class Test {
> public static void main(String[] args) throws Exception {
> /*
> dom4j解析xml:
> 使用步骤:
> 1.下载dom4j的jar包
> 2.拷贝jar包到模块的lib文件夹下
> 3.把jar包添加到模块的classpath路径下
> 4.创建解析器对象
> 5.读取xml文件进行解析,生成Document对象
> 6.使用Document对象获得xml文件中的标签,属性,内容...
> 6.1 使用Document对象获取根元素
> 6.2 使用根元素获取子元素
> ...
> 常用方法:
> 1.创建解析器对象: SAXReader sr = new SAXReader();
> 2.读取xml文件进行解析,生成Document对象---使用SAXReader方法
> Document read(String fileName);
> 3.使用Document对象获取根元素
> Element getRootElement();
> 4.使用元素获取子元素--->使用Element方法
> public List elements() : 获取当前元素的所有子元素
> public String getName() : 获取元素的元素名
> public String getText() : 获取当前元素的文本值
> public String attributeValue(String name) : 获取当前元素下某个属性的值,传入属性名
> public Element element(String name) : 根据元素名获取指定子元素(如果有多个就获取到第一个)
> public String elementText(String name) : 获取指定子元素的文本值,参数是子元素名称
>
> */
> // 1.创建解析器对象
> SAXReader sr = new SAXReader();
>
> // 2..读取xml文件进行解析,生成Document对象
> Document d = sr.read("day14\\books.xml");
>
> // 3.使用Document对象获取根元素
> Element rootE = d.getRootElement();
> System.out.println("根元素的名称:" + rootE.getName());// books
>
> // 4.获取根元素下的所有子元素
> List<Element> list = rootE.elements();// 2个book
>
> // 5.循环遍历list集合
> for (Element e : list) {
> System.out.println("book标签id的属性值:" + e.attributeValue("id"));
>
> // 方式一:
> /*// 6.获取book标签下的所有子标签
> List<Element> list1 = e.elements();
> // 7.循环遍历list1集合
> for (Element e1 : list1) {
> System.out.println("元素的名称:" + e1.getName() + ",元素的文本:" + e1.getText());
> }*/
>
> // 方式二:
> // 获取book标签下指定的子元素
> Element e1 = e.element("name");
> Element e2 = e.element("author");
> Element e3 = e.element("sale");
> System.out.println("子标签名:" +e1.getName());
> System.out.println("子标签名:" +e2.getName());
> System.out.println("子标签名:" +e3.getName());
>
> // 获取book标签下指定子元素的文本
> String e11 = e.elementText("name");
> String e22 = e.elementText("author");
> String e33 = e.elementText("sale");
> System.out.println("子标签的文本:" +e11);
> System.out.println("子标签的文本:" +e22);
> System.out.println("子标签的文本:" +e33);
> }
> } }