目录
任务描述
本关任务:使用Dom4j获取books.xml
文档中的所有书本信息。
相关知识
Dom4j是一个易于使用的开源库,用于Java
平台,采用了Java
集合框架并完全支持 DOM , SAX , JAXP 。
注意:使用Dom4j前我们需要先去官网下载Dom4j包,下载地址。
为了完成本关任务,你需要掌握Dom4j的基本用法。
获取 Document 对象
Dom4j中,获得Document
对象的方式有三种:
- 读取
XML
文件,获得document
对象; - 解析
XML
形式的文本,得到document
对象; - 主动创建
document
对象。
通常使用第一种读取XML
文件的情况较多,方式如下:
Info.xml
<students>
<student name="Mary">大家好,我是Mary</student>
</students>
SAX
是一种XML
解析的替代方法。相比于DOM
,SAX
是一种速度更快,更有效的方法:
SAXReader reader = new SAXReader();
//解析文档这里需要抛出DocumentException异常。
try {
Document document = reader.read(new File("Info.xml"));
} catch (DocumentException e) {
e.printStackT\frace();
}
节点对象的操作
当我们取得Document
对象后,我们就可以获取它的每一个节点了。下面我们来学习几个经常使用到的节点获取:
获取文档的根节点
//读取后的第二步,就是得到Root节点。一切XML分析都是从Root元素开始的
Element rootElm = document.getRootElement();
获取某节点的单个子节点
Element elm=rootElm.element("student");
获取某节点的所有子节点元素
List<Element> elms=rootElm.elements("student");
获取某节点的内容
//获取节点内容有两种方式:
//通过元素获取
String text=document.getRootElement().element("student").getText();
//通过根节点直接获取元素内容
String elementText=document.getRootElement().elementText("student");
以上两种方式输出结果均为:大家好,我是Mary
节点对象的属性方法操作
取得某节点下的某属性
Element rootElement = saxRead.getRootElement().element("student");
Attribute attribute = rootElement.attribute("name");
取得某节点属性的内容
//获取节点属性内容也有两种方式:
Element element = document.getRootElement().element("student");
//通过节点属性获取内容
String text = element.attribute("name").getText();
//通过元素获取内容
String attributeValue = element.attributeValue("name");
以上两种方式输出结果均为:Mary
编程要求
在右侧文件夹中查看books.xml
文档信息,然后在编辑器补充代码,获取books.xml
文档中的所有书本的信息,以书名---作者
的方式输出。
注意:`books.xml`文档的路径为`src/step1/books.xml`
测试说明
平台会对你编写的代码进行测试:
预期输出:
三国演义---罗贯中
红楼梦---曹雪芹
水浒传---施耐庵
西游记---吴承恩
开始你的任务吧,祝你成功!
参考答案
Task.java
package step1;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Task {
public static void main(String[] args) {
//该集合用来存储书本信息
List<String> bookList=new ArrayList<>();
/********** Begin **********/
//1.获取Document对象
SAXReader reader = new SAXReader();
//解析文档这里需要抛出DocumentException异常。
try {
Document document = reader.read(new File("src/step1/books.xml"));
//2.获取根节点
Element rootElm = document.getRootElement();
//3.获取根节点下所有子节点
List<Element> elms=rootElm.elements("book");
//4.遍历子节点并将文档中信息添加到集合
for(int i=0;i<elms.size();i++){
Element e = elms.get(i);
bookList.add(e.getText()+"---"+e.attributeValue("author"));
}
} catch (DocumentException e) {
e.printStackTrace();
}
//5.遍历输出文档信息
for(int i=0;i<bookList.size();i++){
System.out.println(bookList.get(i));
}
/********** End **********/
}
}