← 返回首页 XML格式化工具

XML完全教程:从入门到精通

全面详解XML语言基础与进阶知识,掌握这一重要的标记语言,提升数据处理与交换能力

目录

1. XML介绍

XML(eXtensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。它是由万维网联盟(W3C)在1998年推出的,设计目标是简化SGML(Standard Generalized Markup Language)的复杂性,同时保留其灵活性和强大功能。

1.1 什么是XML?

XML是一种元标记语言,它定义了一套规则,用于以人类可读和机器可解析的格式对文档进行编码。XML的主要特点包括:

1.2 XML的历史与发展

XML的诞生有其特定的历史背景:

随着时间的推移,许多相关技术也发展起来,包括XML Schema、XSLT、XPath和XQuery等,这些技术共同构成了XML技术栈。

1.3 XML的重要性

尽管近年来JSON等更简洁的数据格式变得流行,XML仍然在许多领域保持重要地位:

简单XML文档示例
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="科幻">
    <title>三体</title>
    <author>刘慈欣</author>
    <year>2008</year>
    <price>38.00</price>
  </book>
  <book category="小说">
    <title>活着</title>
    <author>余华</author>
    <year>1993</year>
    <price>35.00</price>
  </book>
</bookstore>

注意:XML看起来很像HTML,但它们的用途不同。HTML用于显示数据,而XML用于描述和传输数据。XML没有预定义的标签,标签的含义由文档创建者定义。

返回顶部 ↑

2. XML语法基础

要正确使用XML,必须理解其基本语法规则。XML有一套严格的语法,不遵循这些规则的文档将被视为无效。

2.1 XML声明

XML文档通常以XML声明开始,指定XML版本和字符编码:

<?xml version="1.0" encoding="UTF-8"?>

这行声明是可选的,但建议始终包含它。它必须位于文档的第一行,前面不能有任何内容(包括空格)。

2.2 元素与标签

XML文档由元素组成,每个元素由开始标签、内容和结束标签组成:

<title>三体</title>

元素命名规则:

2.3 属性

XML元素可以包含属性,提供有关元素的额外信息:

<book category="科幻">

属性值必须始终使用引号(单引号或双引号)括起来。与元素类似,属性名也必须遵循命名规则。

2.4 嵌套元素

XML元素可以嵌套,创建层次结构:

<book>
  <title>三体</title>
  <author>刘慈欣</author>
</book>

正确的嵌套非常重要。以下是错误的嵌套:

<book><title>三体</book></title> <!-- 错误 -->

2.5 空元素

没有内容的元素称为空元素,可以使用两种方式表示:

<image src="cover.jpg"></image>
<image src="cover.jpg" /> <!-- 简写形式 -->

2.6 注释

XML注释使用以下语法:

<!-- 这是一个XML注释 -->

注释不能包含两个连续的连字符(--),也不能以连字符结尾。

2.7 字符实体

某些字符在XML中有特殊含义(如<和>)。要在文本中使用这些字符,必须使用字符实体:

字符 实体
< &lt;
> &gt;
& &amp;
' &apos;
" &quot;
字符实体使用示例
<message>在XML中,&lt;book&gt;标签表示一本书。</message>

显示为:"在XML中,<book>标签表示一本书。"

2.8 CDATA部分

当需要包含大量特殊字符而不想使用实体时,可以使用CDATA部分:

<script>
<![CDATA[
  if (x < y && y > z) {
    // 代码逻辑
  }
]]>
</script>

CDATA部分中的文本不会被XML解析器解析,所有字符都被视为普通字符。

警告:不遵循XML语法规则的文档将被视为无效XML。大多数XML解析器会拒绝处理无效的XML文档,因此严格遵循语法规则非常重要。

返回顶部 ↑

3. XML文档结构

XML文档必须具有良好的结构,即遵循特定的组织形式和规则。良好结构的XML文档更易于处理和理解。

3.1 文档根元素

每个XML文档必须有且仅有一个根元素,所有其他元素都嵌套在其中。根元素也被称为文档元素。

<?xml version="1.0" encoding="UTF-8"?>
<bookstore> <!-- 根元素 -->
  <book>...</book>
  <book>...</book>
</bookstore>

3.2 元素层次结构

XML文档形成树状结构,元素之间存在父子关系:

XML层次结构示例
<library>
  <section name="科技">
    <book id="1">
      <title>人工智能导论</title>
      <author>
        <first-name>张</first-name>
        <last-name>三</last-name>
      </author>
    </book>
  </section>
</library>

3.3 元素与属性的选择

在设计XML文档时,经常需要决定信息应该作为元素还是属性。两种方式各有优缺点:

使用元素 使用属性
适合存储数据 适合存储元数据(关于数据的数据)
可以包含多个值 只能有一个值
可以嵌套 不能嵌套
容易扩展 扩展性有限
元素与属性的对比示例

使用元素表示信息:

<book>
  <id>1</id>
  <title>XML基础</title>
  <language>中文</language>
</book>

使用属性表示相同信息:

<book id="1" title="XML基础" language="中文"></book>

最佳实践: 一般来说,核心数据应该使用元素表示,而用于标识或分类的元数据可以使用属性表示。如果数据需要嵌套结构或可能有多个值,始终使用元素。

3.4 命名空间

当使用来自不同来源的XML文档或在一个文档中混合不同类型的内容时,可能会出现元素名称冲突。XML命名空间提供了解决这个问题的方法。

命名空间使用xmlns属性声明,通常指向唯一的URI:

<root xmlns:h="http://www.w3.org/HTML/1998/html4"
      xmlns:f="http://www.furniture.org/items">
  <h:table> <!-- HTML表格 -->
    <h:tr>
      <h:td>数据</h:td>
    </h:tr>
  </h:table>
  
  <f:table> <!-- 家具桌子 -->
    <f:name>餐桌</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
</root>

也可以定义默认命名空间,应用于所有没有前缀的元素:

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>默认命名空间示例</title>
  </head>
  <body>
    <h1>这里的所有元素都属于默认命名空间</h1>
  </body>
</html>

3.5 处理指令

XML处理指令向应用程序提供特殊指令。它们以<?开始,以?>结束:

<?xml version="1.0" encoding="UTF-8"?> <!-- XML声明是最常见的处理指令 -->
<?xml-stylesheet type="text/xsl" href="style.xsl"?> <!-- 应用XSLT样式表 -->

3.6 DTD和XML Schema引用

XML文档可以引用文档类型定义(DTD)或XML Schema,用于验证文档:

<!-- 使用DTD -->
<?xml version="1.0"?>
<!DOCTYPE bookstore SYSTEM "bookstore.dtd">
<bookstore>...</bookstore>

<!-- 使用XML Schema -->
<?xml version="1.0"?>
<bookstore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="bookstore.xsd">
  ...
</bookstore>

注意: 良好结构的XML文档是指语法正确的文档,而有效的XML文档是指符合DTD或Schema定义的文档。一个XML文档可以是良好结构的,但不一定有效(如果它不符合指定的DTD或Schema)。

返回顶部 ↑