文章目录
一、XML 简介
(Extensible Markup Language)
-
什么是 什么是 xml?
- xml 是可扩展的标记性语言
-
xml 的作用?
- 用来保存数据,而且这些数据具有自我描述性
- 它还可以做为项目或者模块的配置文件(idea生成的项目中web.xml会被tomcat服务器读取)
- 还可以做为网络传输数据的格式(现在 JSON 为主)。
二、xml 语法
1、文档声明。
<?xml version="1.0" encoding="UTF-8"?>
xml 声明。
而且这个<?xml 要连在一起写,否则会有报错
属性:
version 是版本号
encoding 是 xml 的文件编码
standalone=“yes/no” 表示这个 xml 文件是否是独立的 xml 文件
2、元素(标签)
什么是 xml 元素
元素是指从开始标签到结束标签的内容。
例如:
元素 我们可以简单的理解为是 标签。
XML 命名规则
XML 元素必须遵循以下命名规则:
1)名称可以含字母、数字以及其他的字符
2)名称不能以数字或者标点符号开始
3 名称不能以字符 “xml”(或者 XML、Xml)开始 (它是可以的,但要规范不行)
4)名称不能包含空格
xml 也 中的元素(标签)也 成 分成 单标签和双标签
3、xml 属性
xml 的标签属性和 html 的标签属性是非常类似的, 属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个属性。用 每个属性的值必须使用 号 引号 引起来。
属性的规则和标签的书写规则一致。
属性 必须用引号 引起来,不过单引号 双引号都行
4、xml 注释
html 和 XML 注释 一样 :
5、文本区域(CDATA 区)
CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
CDATA 格式:
6、语法规则
1) 有 所有 XML 元素都须有关闭标签 (也就是闭合)
2 )XML 标签对大小写敏感
3 )XML 必须正确地嵌套
4 )XML 文档必须有根元素
根元素就是顶级元素,
没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯一一个才行。
5 )XML 的属性值须加引号
6 )XML 中的特殊字符
和HTML的特殊字符一样
三、xml 解析技术介绍
-
xml 是可扩展的标记语言。
- 不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。
- document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)
-
早期 JDK 为我们提供了两种 xml 解析技术 : DOM 和 和 Sax( 已经过时,但我们需要知道这两种技术 )
- dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
-
Java对 dom 技术解析标记也做了实现。
- sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML )
- SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。
- 它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。
- 所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。
-
第三方的解析:
- jdom 在 dom 基础上进行了封装 、
- dom4j 又对 jdom 进行了封装。
- pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件。
这个 Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。
四、dom4j 解析技术
由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j 的 jar 包。
dom4j 编程步骤
第一步: 先加载 xml 文件创建 Document 对象
第二步:通过 Document 对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
第四步:找到你想要修改、删除的子元素,进行相应在的操作
第五步,保存到硬盘上
1、获取 document 对象
示例:
需要解析的 books.xml 文件内容
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book sn="SN12341232">
<name>辟邪剑谱</name>
<price>9.9</price>
<author>班主任</author>
</book>
<book sn="SN12341231">
<name>葵花宝典</name>
<price>99.99</price>
<author>班长</author>
</book>
</books>
解析获取 Document 对象的代码
第一步,先创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document
/*
* dom4j 获取 Documet 对象
*/
@Test
public void getDocument() throws DocumentException {
// 要创建一个 Document 对象,需要我们先创建一个 SAXReader 对象
SAXReader reader = new SAXReader();
// 这个对象用于读取 xml 文件,然后返回一个 Document。
Document document = reader.read("src/books.xml");
// 打印到控制台,看看是否创建成功
System.out.println(document);
}
2、遍历 获取所有标签中的内容
需要分四步操作:
第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
第二步,通过 Document 对象。拿到 XML 的根元素对象
第三步,通过根元素对象。获取所有的 book 标签对象
第四步,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始 标签和结束标签之间的文本内容
示例;
/*
* 读取 xml 文件中的内容
*/
@Test
public void readXML() throws DocumentException {
// 第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/books.xml");
// 第二步,通过 Document 对象。拿到 XML 的根元素对象
Element root = document.getRootElement();
// 打印测试
// Element.asXML() 它将当前元素转换成为 String 对象
// System.out.println( root.asXML() );
// 第三步,通过根元素对象。获取所有的 book 标签对象
// Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
List<Element> books = root.elements("book");
// 第四步,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,
for (Element book : books) {
// 测试
// System.out.println(book.asXML());
// 拿到 book 下面的 name 元素对象
Element nameElement = book.element("name");
// 拿到 book 下面的 price 元素对象
Element priceElement = book.element("price");
// 拿到 book 下面的 author 元素对象
Element authorElement = book.element("author");
// 再通过 getText() 方法拿到起始标签和结束标签之间的文本内容
System.out.println("书名" + nameElement.getText() + " , 价格:"
+ priceElement.getText() + ", 作者:" + authorElement.getText());
}
}