DOM解析原理及结构模型
- 解析原理
- XML DOM 和 HTML DOM一样,XML DOM 将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM进行操作。以下面books.xml文档为例。
使用步骤
- 导入jar包 dom4j-1.6.1j.jar
- 创建解析器
- 读取xml 获得document对象
- 得到根元素
- 根据根元素获取对于的子元素或者属性
常用的方法
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) : 获取指定子元素的文本值,参数是子元素名称
方法演示
xml代码
<?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>
解析
public class Test {
public static void main(String[] args) throws Exception{
/*
Dom4j解析xml文件步骤:
1.下载Dom4j的jar包
2.把jar包拷贝到模块的lib目录下,并添加到classpath路径中
3.创建解析器对象
4.使用解析器对象读取xml文件到内存中,生成Document对象
5.根据Document对象获取根元素
6.使用根元素获取下面的子元素或者属性,依次类推...
常用的方法:
1.创建解析器对象: public SAXReader();
2.读xml文件,生成Document对象---->使用SAXReader的方法
Document read(String fileName);
3.根据Document对象获取根元素--->使用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 document = sr.read("day14\\book.xml");
// 3.根据Document对象获取根元素
Element rootE = document.getRootElement();
System.out.println("根标签名:"+rootE.getName());// 根标签名:books
// 4.使用根元素获取下面的子元素或者属性
List<Element> list = rootE.elements();// 获取根标签下的2个book标签
// 5.循环遍历根标签下的2个book标签
for (Element e : list) {
System.out.println("根标签下的子标签名:"+e.getName());// book book
System.out.println("根标签下的book标签的属性值:"+e.attributeValue("id"));// 0001 0002
// 获取book标签下面的所有子标签
List<Element> bookElements = e.elements();// name,author,sale
// 循环遍历
for (Element element : bookElements) {
// 获取book标签的子标签名
System.out.println("book标签的子标签名:"+element.getName());
// 获取book标签的子标签的文本内容
System.out.println("book标签的子标签的文本内容:"+element.getText());
}
System.out.println("==============");
}
// 获取第一个book标签
Element bookE = list.get(0);
// 直接通过book标签获取作者标签
Element authorE = bookE.element("author");
System.out.println(authorE.getName()+":"+authorE.getText());// author:张孝祥
// 直接通过book标签获取作者标签的文本内容
String text = bookE.elementText("author");
System.out.println(text);// 张孝祥
}
}