XML

1. XML简介

1.1. 什么是 xml?

xml 是可扩展的标记性语言

1.2. xml 的作用?

  1. 用来保存数据,而且这些数据具有自我描述性

  2. 它还可以做为项目或者模块的配置文件

  3. 还可以做为网络传输数据的格式(现在 JSON 为主)。

2. xml语法

  1. 文档声明。
  2. 元素(标签)
  3. xml 属性
  4. xml 注释
  5. 文本区域(CDATA 区)

2.1. 文档声明

  1. <?xml version="1.0" encoding="UTF-8"?> xml 声明。
  2. <!-- xml 声明 version 是版本的意思 encoding 是编码 -->
  3. <!-- 而且这个<?xml 要连在一起写,否则会有报错 -->

2.2. xml注释

html 和 XML 注释 一样

  1. <!-- 这是xml注释 -->

2.3. 元素(标签)

元素是指从开始标签到结束标签的内容。 例如:

  1. <title>java 编程思想</title>

元素 我们可以简单的理解为是 标签。 Element 翻译 元素

XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能包含空格
  • xml 中的元素(标签)也 分成 单标签和双标签
  • 名称不能以字符 “xml”(或者 XML、Xml)开始 (它是可以的)

2.4. xml语法规则

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

2.4.2. XML 标签对大小写敏感

2.4.3. XML 必须正确地嵌套

2.4.4. XML 文档必须有根元素

根元素就是顶级元素, 没有父标签的元素,叫顶级元素。

根元素是没有父标签的顶级元素,而且是唯一一个才行。

2.4.5. XML 的属性值须加引号

2.4.6. XML 中的特殊字符

2.4.7. 文本区域(CDATA 区)

CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析

CDATA格式

<![CDATA][这里可以把你输入的字符原样显示,不会解析xml]>

3. xml解析技术

不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。

document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)

早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介(已经过时,但我们需要知道这两种技术)

这个 Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。

3.1. dom4j解析技术(重点)

由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j 的 jar 包

3.2. 获取document对象

创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。

day05_xml学习笔记 - 图1

需要解析的 books.xml 文件内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <books>
  3. <book sn="SN12341232">
  4. <name>辟邪剑谱</name>
  5. <price>9.9</price>
  6. <author>班主任</author>
  7. </book>
  8. <book sn="SN12341231">
  9. <name>葵花宝典</name>
  10. <price>99.99</price>
  11. <author>班长</author>
  12. </book>
  13. </books>

解析获取 Document 对象的代码

第一步,先创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document

  1. /*
  2. * dom4j 获取 Documet 对象
  3. */
  4. @Test
  5. public void getDocument() throws DocumentException {
  6. // 要创建一个 Document 对象,需要我们先创建一个 SAXReader 对象
  7. SAXReader reader = new SAXReader();
  8. // 这个对象用于读取 xml 文件,然后返回一个 Document。
  9. Document document = reader.read("src/books.xml");
  10. // 打印到控制台,看看是否创建成功
  11. System.out.println(document);
  12. }

3.3. 遍历 标签 获取所有标签中的内容(重点)

需要分四步操作:

第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象

第二步,通过 Document 对象。拿到 XML 的根元素对象

第三步,通过根元素对象。获取所有的 book 标签对象

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

  1. /*
  2. * 读取 xml 文件中的内容
  3. */
  4. @Test
  5. public void readXML() throws DocumentException {
  6. // 需要分四步操作:
  7. // 第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
  8. // 第二步,通过 Document 对象。拿到 XML 的根元素对象
  9. // 第三步,通过根元素对象。获取所有的 book 标签对象
  10. // 第四小,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到
  11. 起始标签和结束标签之间的文本内容
  12. // 第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
  13. SAXReader reader = new SAXReader();
  14. Document document = reader.read("src/books.xml");
  15. // 第二步,通过 Document 对象。拿到 XML 的根元素对象
  16. Element root = document.getRootElement();
  17. // 打印测试
  18. // Element.asXML() 它将当前元素转换成为 String 对象
  19. // System.out.println( root.asXML() );
  20. // 第三步,通过根元素对象。获取所有的 book 标签对象
  21. // Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
  22. List<Element> books = root.elements("book");
  23. // 第四小,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,
  24. for (Element book : books) {
  25. Element nameElement = book.element("name");
  26. //getText()可以获取标签中的文本内容
  27. String nameText = nameElement.getText();
  28. //直接获取指定标签名的文本内容
  29. String priceText = book.elementText("price");
  30. String authorText = book.elementText("author");
  31. String snValue = book.attributValue(snValue,nameText);
  32. System.out.println(new Book(snValue,nameText,Double.parseDouble(priceText),authorText))
  33. }
  34. }