为什么需要文本格式?

文本格式便于存储信息,因为它们可以由程序和人类创建和处理。

文本文件(文本格式的文件)可以在各种文本编辑器中打开、阅读和编辑。

许多程序使用基于文本的配置文件,即使格式包含数字和二进制(是/否)值。

由于需要从文本格式转换为内部格式,反之亦然,这使得程序稍微复杂一些,但它可以在不使用程序本身的配置工具的情况下手动编辑配置。

现在在哪里使用 XML?

XML 用于 IT 的各个领域。它可以是配置文件(带有程序设置)或用于在程序之间传输数据的文件。在 Java 中,最常见的用例之一是配置 Maven,一种构建自动化工具。

XML 文档的结构

XML 文档的物理和逻辑结构是分开的。就物理结构而言,文档由可以引用其他实体的实体组成。

唯一的根元素是文档实体。实体是文档中最小的部分。所有实体都有一个名称并包含字符。

反过来,字符属于两个类别之一:字符数据或标记。

标记包括:

  • 标记,表示元素边界;
  • 声明和处理指令,包括它们的属性;
  • 实体引用;
  • 评论;
  • 字符序列包装 CDATA 部分。

从逻辑上讲,文档由元素、注释、声明、实体引用和处理指令组成。标记用于在文档中创建所有这些结构。

文档的所有组成部分都分为序言和根元素。根元素是 XML 文档的强制性基本部分,而序言可能根本不存在。根元素可以由嵌套元素、字符数据和注释组成。文档的元素必须正确嵌套:任何在另一个元素内开始的元素也必须在该元素内结束。

标记符号

标记总是以<开头并以>结尾。

<和>(尖括号)和& (与)符号起着特殊的作用。尖括号表示元素、处理指令和一些其他序列的边界。符号帮助我们用实体替换文本。

声明

XML 声明指定用于编写文档的语言版本。XML 规范要求以 XML 声明开始文档,因为文档内容的正确解释取决于语言的版本。

在该语言的第一个版本 (1.0) 中,此声明是可选的,但在以后的版本中是强制性的。假定缺少声明表示版本 1.0。声明还可能包含有关文档编码的信息。

例子:

<?XML version="1.1" encoding="UTF-8" ?>

标签

标签是包含元素名称的标记结构。有开始标签和结束标签。还有结合开始和结束元素的空元素标签。

例子:

  • 开始标签:<tag1>

  • 结束标签:</tag1>

  • 空元素标签:<empty_tag1 />

属性

XML 元素的另一部分是属性。一个元素可以有多个唯一的属性。属性让我们指定有关元素的更多信息。或者更准确地说,属性定义了元素的特性。

属性始终是名称-值对:

名称 = "值"

标签中的属性示例:

<tag1 name = "value">元素</tag1>

属性的值必须用双引号 ( " ) 或单引号 ( ' ) 括起来。属性仅用于开始标记和空元素标记。

转义五个特殊字符(<、>、'、"、&)

显然,不能在字符数据和属性值中使用<>&符号。您需要特殊的转义序列来表示它们。在属性值内写撇号和引号时也使用特殊序列:

象征 替代品
< <
> >
& &
'

此外,要编写\字符,您需要使用\\

CDATA 部分

CDATA 部分不是文本的逻辑单元。这种类型的部分可以出现在 XML 语法允许我们在文档中放置字符数据的地方。

该部分以<![CDATA[开始并以]]>结束。字符数据放置在这些标记位之间,并且可以直接使用<>&符号。

评论

注释不被视为字符数据。注释以<!--开头,以-->结尾。字符序列--不能在注释中使用。此外,在注释中,与号字符不表示标记。

例子:

<!-- 这是评论 -->

名称

在 XML 中,所有名称只能包含 Unicode 字符表中的字母、阿拉伯数字、句点、冒号、连字符和下划线。名称可以以字母、冒号或下划线开头。请注意,名称不能以字符串XML开头。

例子

让我们看一下 Java 类和该类的对象。然后我们将尝试序列化 XML 格式的对象。班级代码:

public class Book {
   private String title;
   private String author;
   private Integer pageCount;
   private List<String> chapters;

   public Book(String title, String author, Integer pageCount, List<String> chapters) {
       this.title = title;
       this.author = author;
       this.pageCount = pageCount;
       this.chapters = chapters;
   }
// Getters/setters
}

和创建对象:

Book book = new Book("My Favorite Book", "Amigo", 999, Arrays.asList("Chapter 1", "Chapter 2", "Chapter 3", "Chapter 4", "Chapter 5", "Chapter 6"));

下面是一个包含 4 个字段的 Java 对象的有效 XML 表示的示例,其中一个是集合(参见上面的 Java 代码):

<Book>
  <title>我最喜欢的书</title>
  <author>Amigo</author>
  <pageCount>999</pageCount>
 <chapters>
    <chapters>第一章</chapters>
    <chapters>第二章</chapters>
    <chapters>第3章</chapters>
    <chapters>第4章</chapters>
    <chapters>第5章</chapters>
    <chapters>第6章</chapters>
 </chapters>
</Book>

XML模式

XML 模式是对 XML 文档结构的描述。相应的规范(XML Schema Definition,或 XSD)是 W3C 的推荐标准。

XSD 旨在表达 XML 文档必须遵循的规则。但对我们来说最有趣的是 XSD 被设计用于开发处理 XML 文档的软件。它让我们以编程方式检查 XML 文档的正确性。

包含 XML 架构的文件具有 .xsd 扩展名。设计 XML 模式超出了本课的范围,所以现在只需要知道这种可能性是存在的。