0、文档声明
补充:
新建的工程颜色深,而且有src目录。
1.XML 简介
什么是 xml?
xml 是可扩展的标记性语言。
2、xml 的作用?
xml 的主要作用有:
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件
3、还可以做为网络传输数据的格式(现在 JSON 为主)。
3、xml 语法
- 文档声明。
- 元素(标签)
- xml 属性
- xml 注释
- 文本区域(CDATA 区)
3.1、文档声明
我们先创建一个简单 XML 文件,用来描述图书信息。
1)创建一个 xml 文件
<?xml version="1.0" encoding="UTF-8"?> xml 声明。
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->
而且这个<?xml 要连在一起写,否则会有报错
属性
version 是版本号
encoding 是 xml 的文件编码
standalone="yes/no" 表示这个 xml 文件是否是独立的 xml 文件
2)图书有 id 属性 表示唯一 标识,书名,有作者,价格的信息
<?xml version="1.0" encoding="utf-8" ?>
<!-- xml声明 version是版本的意思 encoding是编码 -->
<books> <!-- 这是xml注释 -->
<book id="SN123123413241"> <!-- book标签描述一本图书 id属性描述 的是图书 的编号 -->
<name>java编程思想</name> <!-- name标签描述 的是图书 的信息 -->
<author>华仔</author> <!-- author单词是作者的意思 ,描述图书作者 -->
<price>9.9</price> <!-- price单词是价格,描述的是图书 的价格 -->
</book>
<book id="SN12341235123"> <!-- book标签描述一本图书 id属性描述 的是图书 的编号 -->
<name>葵花宝典</name> <!-- name标签描述 的是图书 的信息 -->
<author>班长</author> <!-- author单词是作者的意思 ,描述图书作者 -->
<price>5.5</price> <!-- price单词是价格,描述的是图书 的价格 -->
</book>
</books>
在浏览器中可以查看到文档
3.2、xml 注释
html 和 XML 注释 一样 : <!-- html 注释 -->
3.3、元素(标签)
咱们先回忆一下:
html 标签:
格式:<标签名>封装的数据</标签名>
单标签: <标签名 /> <br /> 换行 <hr />水平线
双标签 <标签名>封装的数据</标签名>
标签名大小写不敏感
标签有属性,有基本属性和事件属性
标签要闭合(不闭合 ,html 中不报错。但我们要养成良好的书写习惯。闭合)
1)什么是 xml 元素
元素是指从开始标签到结束标签的内容。
例如:
<title>java 编程思想</title>
元素 我们可以简单的理解为是 标签。
Element 翻译 元素
2)XML 命名规则
XML 元素必须遵循以下命名规则:
2.1)名称可以含字母、数字以及其他的字符
例如:
<book id="SN213412341"> <!-- 描述一本书 -->
<author>班导</author> <!-- 描述书的作者信息 -->
<name>java 编程思想</name> <!-- 书名 -->
<price>9.9</price> <!-- 价格 -->
</book>
2.2)名称不能以数字或者标点符号开始
2.3)名称不能以字符 “xml”(或者 XML、Xml)开始 (它是可以的)
2.4)名称不能包含空格
3)xml 中的元素(标签)也 分成 单标签和双标签:
单标签
格式: <标签名 属性=”值” 属性=”值” ...... />
双标签
格式:< 标签名 属性=”值” 属性=”值” ......>文本数据或子标签</标签名>
3.4、xml 属性
xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个属性。每个属性的值必须使用 引号 引起来。
规则和标签的书写规则一致。
1)属性必须使用引号引起来,不引会报错示例代码
3.5、语法规则:
3.5.1)所有 XML 元素都须有关闭标签(也就是闭合)
3.5.2)XML 标签对大小写敏感
3.5.3)XML 必须正确地嵌套
3.5.4)XML 文档必须有根元素
根元素就是顶级元素,
没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯一一个才行。
3.5.5)XML 的属性值须加引号
3.5.6)XML 中的特殊字符
3.5.7)文本区域(CDATA 区)
CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要xml 语法解析
CDATA 格式:
<![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>
4、xml 解析技术介绍
xml 可扩展的标记语言。
不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的dom技术来解析。
document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)
5、dom4j 解析技术(重点*****)
由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用dom4j 就需要到dom4j 官网下载dom4j的 jar 包。
5.1、Dom4j 类库的使用
解压后:
5.2、dom4j 目录的介绍:
1)docs 是 文 档 目 录
如何查 Dom4j 的文档
Dom4j 快速入门
2)lib 目录
3)src 目录是第三方类库的源码目录:
5.3、dom4j 编程步骤:
第一步: 先加载 xml 文件创建 Document 对象
第二步:通过 Document 对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
第四步:找到你想要修改、删除的子元素,进行相应在的操作
第五步,保存到硬盘上
5.4、获取 document 对象
创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。
需要解析的 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
@Test
public void test1() throws Exception
{
// 创建一个SaxReader输入流,去读取 xml配置文件,生成Document对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
System.out.println(document);
}
5.5、遍历 标签 获取所有标签中的内容(*****重点)
需要分四步操作:
第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
第二步,通过 Document 对象。拿到 XML 的根元素对象
第三步,通过根元素对象。获取所有的 book 标签对象
第四小,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结束标签之间的文本内容
package com.atguigu.pojo;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.util.List;
public class Dom4jTest
{
@Test
public void test1() throws Exception
{
// 创建一个SaxReader输入流,去读取 xml配置文件,生成Document对象
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
System.out.println(document);
}
/**
* 读取books.xml文件生成Book类
*/
@Test
public void test2() throws Exception
{
//1 读取books.xml 文件
SAXReader reader = new SAXReader();
// 在Junit测试中,相对路径是从模块名开始算
Document document = reader.read("src/books.xml");
// 2 通过Document对象获取根元素
Element rootElement = document.getRootElement();
// System.out.println(rootElement);
//3 通过根元素获取book标签对象
//element()和elements()都是通过标签名查找子元素
List<Element> books = rootElement.elements("book");
// 4 遍历,处理每个book标签转换为Book类
for (Element book : books)
{
//asXML() 标签对象。转换为标签字符串
// System.out.println(book.asXML());
Element nameElement = book.element("name");
// getText();可以获取标签中的文本内容
String nameText = nameElement.getText();
// 直接 获取指定标签名的文本内容
String priceText = book.elementText("price");
String authorText = book.elementText("author");
// 获取属性值
String snValue = book.attributeValue("sn");
System.out.println(new Book(snValue, nameText, Double.parseDouble(priceText), authorText));
}
}
}
打印内容: