xml及dom4j解析

本文介绍了XML的基本语法规范,包括文档声明、元素命名规则、实体、DOCTYPE声明、CDATA和PCDATA等内容。接着讨论了XML解析的两种主要方式——SAX和DOM,其中SAX效率高但仅能一次性获取,而DOM则将整个文档加载到内存,适合多次访问。重点讲解了Dom4J解析XML的步骤,从获取文件对象到转换为Document,再到遍历节点进行操作。

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

xml格式:
1、语法规范:
1)、必须有xml文档声明:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml 	:  文档的开始,表示当前是xml文档
version	:	xml的版本,目前只有"1.0"
encoding :	编码
standalone	:xml文档是否独立,默认是yes
?>	:	xml文档声明结束

2)、必须有且仅有一个跟一个根元素
3)、严格区分大小写
4)、属性值用引号(双引号或单引号):等号分开的 名称-值对;在一个元素上,相同的属性只能出现一次
5)、标记成对;
6)、空标记关闭
7)、元素正确嵌套
注:注意文本文件保存时候的默认编码格式是ANSI,需用记事本把它手动把它改成utf-8保存。

2、元素命名规则
1)、名称中可以包含字母、数字或者其他可见字符
2)、名称不能以数字开头
3)、不能以XML/xml/Xml…开头
4)、名称中不能包含空格。
5)、名称中不能包含冒号(注:冒号留给命名空间使用)

3、实体
实体叫ENTITY,实体的作用是避免重复输入。作用相当于宏或者变量。
1)、内置的5种实体

实体				符号
&lt;			<
&gt;			>
&amp;			&
&quot;			"
&apos;			'

2)、自定义实体

<!DOCTYPE 根元素[
	<!ENTITY 实体名 "实体内容">
]>

4、文档类型声明
文档类型定义–DOCTYPE,文档类型声明,紧跟在xml声明后面,包含所有的实体声明

5、CDATA
用于把整段文本解释为纯字符数据而不是标记的情况。如包含大量的<、>、&或者"字符。
CDATA节中的所有字符都会被当做元素字符数据的常量部分,而不是xml标记,可以输入
除]]>外任意字符,不能嵌套。

<![CDATA[......]]>

6、PCDATA
PCDATA的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为xml元素的开始标签与结束标签之间的文本。

·XML解析

基本的解析方式有两种:一种叫SAX,另一种叫DOM。
SAX(Simple API for XML)是基于事件流的解析,DOM(document Object Model)是基于XML文档树结构的解析。
SAX:效率高,数据量小,仅一次获取
DOM:整棵树记载到内存中,耗内存,可多次获取

·Dom4J解析XML文档

1、得到要解析的文件对象
2、得到解析器
3、通过解析器将文件对象转换成Document对象
4、得到当前文档对象的根节点
5、得到根节点的所有子节点,返回迭代器
6、遍历,得到每一个子节点的名称和值

·Dom4jReader

//1、得到要解析的文件对象
File file = new File("src/test.xml");
//2、得到解析器
SAXReader reader = new SAXReader();
//3、通过解析器将文件对象转换成Document对象
Document document = reader.read(file);
//4、得到当前文档对象的根节点
Element root = document.getRootElement();
//5、得到根节点的所有子节点,返回迭代器
Iterator<Element> iterator = root.elementIterator();
//6、遍历,得到每一个子节点的名称和值
while(iterator.hasNext()){
	Element el = iterator.next();
	System.out.println(el.getName());
	System.out.println(el.getText());
}

·Dom4jWriter

使用DocumentHelper来创建 Document对象
Document document = DocumentHelper.createDocument();
// 创建元素并设置关系
Element person = document.addElement("person");
Element name = person.addElement("name");
Element age = person.addElement("age");
// 设置文本
name.setText("shsxt");
age.setText("10");
// 创建格式化输出器
OutputFormat of = OutputFormat.createPrettyPrint();
of.setEncoding("utf-8");
// 输出到文件
File file = new File("src/outputdom4j.xml");
XMLWriter writer = new XMLWriter(new FileOutputStream(new File(file.getAbsolutePath())),of);
// 写出
writer.write(document);
writer.flush();
writer.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值