XML 入门

什么是 XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

XML 与 HTML 的主要差异

  • XML 不是 HTML 的替代。
  • XML 和 HTML 为不同的目的而设计:
  • XML 被设计为传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息

XML 的结构

XML 文档第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码
<?xml version="1.0" encoding="UTF-8"?>

XML 文档是树结构的,它有且仅有一个根元素。
根元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。类似 HTML 中的标签,所有元素均可拥有文本内容和属性。
示例:

<root>
      <child>
        <subchild>.....</subchild>
      </child>
</root>

XML 的语法

XML 的语法规则很简单,且很有逻辑,易于学习。

  • 所有 XML 元素都须有关闭标签
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套
  • XML 文档必须有根元素
  • XML 的属性值须加引号(单引号和双引号皆可)
  • 标签中的尖括号等特殊字符需用实体引用替代
实体引用 符号 符号名称
&lt; < 小于(Less than)
&gt; > 大于(Greater than)
&amp; & 与符号(Ampersand)
&apos; ' 单引号(Apostrophe)
&quot; " 双引号(Quotation mark)
  • XML 中的注释同 HTML <!--这里是注释-->
  • 在 XML 中,空格会被保留

    HTML 会把多个连续的空格字符裁减(合并)为一个

  • XML 以 LF 存储换行

    在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。这对字符与打字机设置新行的动作有相似之处。在 Unix 应用程序中,新行以 LF 字符存储。而 Macintosh 应用程序使用 CR 来存储新行。

    CR用符号’\r’表示, 十进制ASCII代码是13, 十六进制代码为0x0D,
    LF使用’\n’符号表示, ASCII代码是10, 十六制为0x0A,
    Dos和windows采用回车+换行(CRLF)表示下一行。

XML 元素命名规则

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

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

可使用任何名称,没有保留的字词。

最佳命名习惯
  1. 使名称具有描述性。
  2. 使用下划线的名称也很不错。
  3. 名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>
  4. 避免 “-“ 字符。如果您按照这样的方式进行命名:”first-name”,一些软件会认为你需要提取第一个单词。
  5. 避免 “.” 字符。如果您按照这样的方式进行命名:”first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
  6. 避免 “:” 字符。冒号会被转换为命名空间来使用。
  7. XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。
  8. 非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。

XML 元素属性

XML 元素可以在开始标签中包含属性,类似 HTML 。属性(Attribute)提供关于元素的额外(附加)信息。XML 属性基本语法:
<元素 属性1="属性值" 属性2="属性值">元素内容</元素>

注意事项:

  1. 属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)。
  2. 一个元素可以有多个属性。
  3. 属性名称在同一个元素标记中只能出现一次。
  4. 属性值不能包括<, >, &之类的特殊字符,否则需要使用转义字符

在 XML 文档中应该尽量避免使用 XML 属性,因使用属性而引起的一些问题:

  • 属性无法包含多重的值(元素可以)
  • 属性无法描述树结构(元素可以)
  • 属性不易扩展(为未来的变化)
  • 属性难以阅读和维护

请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
实例:

<!--使用 date 属性-->
<note date="08/08/2008">
   <to>George</to>
   <from>John</from>
   <heading>Reminder</heading>
   <body>Don't forget the meeting!</body>
</note>

<!--使用 date 元素-->
<note>
  <date>08/08/2008</date>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note> 

<!--使用拓展的 date 元素(W3C推荐使用)-->
<note>
  <date>
     <day>08</day>
     <month>08</month>
     <year>2008</year>
  </date>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

XML 的验证

XML 中,拥有正确语法的 XML 被称为“形式良好”的 XML。
通过 DTD(Document Type Definition,文档类型定义) 验证的 XML 是“合法”的 XML。

XML DTD

DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构。

内部的 DOCTYPE 声明

假如 DTD 被包含在 XML 文件中,它应当包装在一个 DOCTYPE 声明中。
<!DOCTYPE 根元素 [元素声明]>

实例:

<?xml version="1.0"?>
<!DOCTYPE note [
     <!ELEMENT note (to,from,heading,body)>
    <!ELEMENT to      (#PCDATA)>
    <!ELEMENT from    (#PCDATA)>
    <!ELEMENT heading (#PCDATA)>
    <!ELEMENT body    (#PCDATA)>
]>
<note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</note>

<!--以上 DTD 解释如下:
!DOCTYPE note 定义此文档是 note 类型的文档。
!ELEMENT note 定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT name (type) 定义元素的名称和类型-->
外部引用声明

外部DTD按其性质又可分为本地的和公共的。
(1)当引用的DTD文件是本地文件的时候,用SYSTEM标识,并写上”DTD的文件路径”,如下:
<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
(2)如果引用的DTD文件是一个公共的文件时,采用PUBLIC标识,如下方式:
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">

XML——XML文件约束之DTD详解

XML Schema

XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),它是基于 XML 的 DTD 替代者。
类似于 DTD , XML Schema 的作用是定义 XML 文档的合法构建模块。XML Schema 在 2001 年 5 月 2 日成为 W3C 标准。

Schema 教程——W3school

XML 显示样式

XML 支持通过 CSS(层叠样式表)对 XML 文档中各元素的显示样式进行修饰,但是使用 CSS 格式化 XML 不是常用的方法,更不能代表 XML 文档样式化的未来。W3C 推荐使用 XSLT。
XSLT 是首选的 XML 样式表语言。XSLT (eXtensible Stylesheet Language Transformations) 远比 CSS 更加完善。

<?xml-stylesheet type=样式类型(CSS/XSLT) href=文件url?>

CSS 教程——W3school
XSLT 教程——W3school

参考教程

XML 教程——W3school