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

28 篇文章 9 订阅

目录

任务描述

相关知识

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于建章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值