Spring 获取对象原理 第1关Dom4j的基本使用

发布于:2022-10-17 ⋅ 阅读:(733) ⋅ 点赞:(0)

目录

任务描述

相关知识

获取 Document 对象

节点对象的操作

节点对象的属性方法操作

编程要求

测试说明

参考答案


任务描述

本关任务:使用Dom4j获取books.xml文档中的所有书本信息。

相关知识

Dom4j是一个易于使用的开源库,用于Java平台,采用了Java集合框架并完全支持 DOM , SAX , JAXP 。

注意:使用Dom4j前我们需要先去官网下载Dom4j包,下载地址

为了完成本关任务,你需要掌握Dom4j的基本用法。

获取 Document 对象

Dom4j中,获得Document对象的方式有三种:

  1. 读取XML文件,获得document对象;
  2. 解析XML形式的文本,得到document对象;
  3. 主动创建document对象。

通常使用第一种读取XML文件的情况较多,方式如下:

Info.xml

<students>
    <student name="Mary">大家好,我是Mary</student>
</students>

SAX是一种XML解析的替代方法。相比于DOMSAX是一种速度更快,更有效的方法:

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`

测试说明

平台会对你编写的代码进行测试:

预期输出:

  1. 三国演义---罗贯中
  2. 红楼梦---曹雪芹
  3. 水浒传---施耐庵
  4. 西游记---吴承恩

开始你的任务吧,祝你成功!

参考答案

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   **********/
	}
}


网站公告

今日签到

点亮在社区的每一天
去签到