java学习笔记 - web基础五(xml)

简介

  • xml 是可扩展的标记性语言

作用

  • 用来保存数据,而且这些数据具有自我描述性
  • 它还可以做为项目或者模块的配置文件
  • 还可以做为网络传输数据的格式(现在 JSON 为主)

语法

  • 文档声明

  • 元素(标签)

  • xml 属性

  • xml 注释

  • 文本区域(CDATA 区)

    • CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
    1
    CDATA 格式:<![CDATA[这里可以把你输入的字符原样显示,不会解析 xml]]>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8" ?>
<!--
<?xml version="1.0" encoding="UTF-8" ?> 是xml文件的声明
version 是版本号
encoding="UTF-8" 是xml文件使用的字符集编码
-->
<books><!-- books表示多个图书信息-->
<book sn="sn0000001"><!--book表示一个图书信息 sn属性表示图书序列号 -->
<name>时间简史</name><!--name标签表示书名-->
<author>霍金</author><!--author标签表示作者-->
<price>75</price><!--price标签表示价格-->
</book>
<book sn="sn0000002"><!--book表示一个图书信息 sn属性表示图书序列号 -->
<name>西游记</name><!--name标签表示书名-->
<author>吴承恩</author><!--author标签表示作者-->
<price>20</price><!--price标签表示价格-->
</book>
</books>

注释

1
<!-- 这是注释内容-->

命名规则

  • 名称可以含字母、数字以及其他的字符

  • 名称不能以数字或者标点符号开始

  • 名称不能包含空格

元素(标签)

单标签

1
格式: <标签名 属性=”值” 属性=”值” ...... />

双标签

1
格式:< 标签名 属性=”值” 属性=”值” ......>文本数据或子标签</标签名>

语法规则

  • 所有 XML 元素都须有关闭标签(也就是闭合)

  • XML 标签对大小写敏感

  • XML 必须正确地嵌套

  • XML 文档必须有根元素

    • 根元素就是顶级元素,没有父标签的元素而且是唯一一个才行
  • XML 的属性值须加引号

  • XML 中的特殊字符,需使用对应编码,如> 为 &gt ;

dom4j解析技术

  • 使用 dom4j 就需要到 dom4j 官网下载 dom4j的 jar 包

编程步骤

  1. 先加载 xml 文件创建 Document 对象

  2. 通过 Document 对象拿到根元素对象

  3. 通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象

  4. 找到你想要修改、删除的子元素,进行相应在的操作

  5. 保存到硬盘上

遍历步骤

  1. 通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象

  2. 通过 Document 对象。拿到 XML 的根元素对象

  3. 通过根元素对象。获取所有的 book 标签对象

  4. 遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始标签和结束标签之间的文本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Dom4jTest {
/**
* 读取books.xml文件生成book类
* @throws Exception
*/
@Test
public void test1() throws Exception {
//1. 读取配置文件
SAXReader reader = new SAXReader();
Document document = reader.read("src/books.xml");
//2. 通过document获取对象根元素
Element rootElement = document.getRootElement();
//3. 通过根元素获取book标签对象
List<Element> books = rootElement.elements("book");
//4. 遍历,处理每个book标签转换为Book类
for (Element book :books) {
// asXML() 是把标签对象转换为标签字符串
// System.out.println(book.asXML());
Element nameElement = book.element("name");
// System.out.println(nameElement.asXML());
// getText() 可以获取标签中的文本内容
String nameText = nameElement.getText();
// System.out.println(nameText);
// 直接获取指定标签的文本内容
String priceText = book.elementText("price");
// System.out.println(priceText);
String authorText = book.elementText("author");
// attributeValue() 获取属性值得内容
String snValue = book.attributeValue("sn");
System.out.println(new Book(snValue,nameText,authorText,new BigDecimal(priceText)));
}
}
}