Java:XML之JavaSE Dom4j解析

本文介绍Dom4j,一种结合DOM和SAX优点的XML解析工具。内容涵盖Dom4j的特性、使用方法,包括文档对象操作、元素节点处理、内容查询及回写等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML之JavaSE Dom4j解析

概述

Dom4j不属于JacaSE的一部分,属于第三方jar包,集成了DOM和SAX的优点。具有DOM操作方便和SAX处理大文件效率高的特点。

Dom4j进行逐行解析,逐行读取,类似SAX,但是每读取一行都会在内存中保存对应的节点信息。

缺点:如果想要像dom一样随意获取到任意一个子节点,不太方便,但可以通过XPath表达式来解决。

优点:1)不需要创建工厂,直接可以获取解析器;2)能够遍历所有的元素,而且返回的不是NodeList,返回的是集合,与JavaAPI无缝对接,可以使用for循环进行遍历;3)可以处理格式(压缩/对齐);4)方便创建节点 DocumentHelper类。

注:使用Dom4j进行解析时,需导包。

1、获取到文档对象来操作XML文档

	//利用SAXReader类创建实例化对象
	SAXReader reader = new SAXReader();
	
	//创建通过SAXReader的方法实例化Document,注意不要导错包 
	Document read = reader.read(url);

那么,以上就完成了XML文档对象的创建,为了方便使用,我们可以创建方法专门进行文档对象实例化。

	public static Document getDocument(String url){
        SAXReader reader = new SAXReader();
        Document document = null;
        //read方法会抛出异常,这里我们进行异常处理
		try {
			read = reader.read(url);//url为xml文档路径
		} catch (DocumentException e) {
			e.printStackTrace();
		}
        //返回Document对象
		return document;
    }

2、文档对象中的方法及步骤

1)实例化文档对象

Document document = getDocument(url);//通过上述创建的方法实例化

2)在操作文档时,我们首先需要获取根节点,根节点为文档的第一个元素。

Element rootElement = document.getRootElement();

3、元素的常用方法:获取下一层元素节点

1)Element element(String tagName),通过节点名,获取符合该名称的第一个子元素;

2)Element elements(),获取该元素下一层的子节点集合;

3)Element elements(String tagName),获取该元素下一层符合名称的的子节点集合;

4、元素的常用方法:获取该元素内容

1)String getName(),获取元素名;

2)String getText(),获取元素中文本内容;

3)Element getParent(),获取元素父节点;

4)String getPath(),获取元素在文档中的层级结构。

5)short getNodeType(),获取元素的节点类型,元素节点返回0,属性节点返回2,文本返回3;

5、元素的常用方法:创建和内容查询

1)Element addElement(String tagName),在下层节点最后创建一个节点,节点名为tagName,返回创建的节点;

2)Element addText(String data),添加该节点的文本内容data,返回创建的文本节点;

操作完后,需将document回写进入文档。

3)setText(String data),设置该节点的文本内容data;

简单举例,还可以获得元素属性及添加元素属性等,不再一一举例。

6、元素的常用方法:删除操作

1)boolean remove(Element deleteElement),删除下一层子节点,删除成功返回true,否则返回false;

2)boolean remove(Attribute attribute),删除属性,删除成功返回true,否则返回false;

3)boolean remove(Text text),删除文本,删除成功返回true,否则返回false;

7、元素的常用方法:集合操作

通过得到节点集合后,可通过集合的增加或删除操作完成文档内容操作

add,remove,set等,方法同集合方法一致,这里不再详细讲解。

操作完后,需将document回写进入文档。

8、元素的常用方法:DocumentHelper创建节点

static Element createElement(String tagName);创建名为tagName的节点,改节点暂时不输入文档之中,需要通过节点添加方法或集合添加方法加入文档对象中。

操作完后,需将document回写进入文档。

9、元素的常用方法:回写操作(以回写方法为例)

//传入Document实例,isPretty表示是否输出漂亮的文档格式
public static void writeBack(Document document,boolean isPretty) {
    	//声明类
		XMLWriter writer = null;
		try {
            //输出流格式,true表示漂亮的格式,false为压缩格式
            OutputFormat format = isPretty?OutputFormat.createPrettyPrint():OutputFormat.createCompactFormat();
            //实例化XMLwriter对象 ,使用字符转换流,编码方式需设置为"UTF-8"
            //url表示文档地址
			writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(url),"UTF-8"),format);
            //document对象写入文档
			writer.write(document);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally {
			if(writer != null) {
				try {
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值