文章目录
(文章摘自菜鸟教程: https://www.runoob.com/xml/xml-tutorial.html)
1. XML简介
XML 被设计用来传输和存储数据,其焦点是数据的内容。
HTML 旨在显示信息,而 XML 旨在传输信息。
2. XML语法
2.1 XML 文档必须有根元素
XML 必须包含根元素,它是所有其他元素的父元素,比如以下实例中 root 就是根元素:
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
2.2 XML 声明
XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
以上实例包含 XML 版本:1.0
UTF-8 也是 HTML5, CSS, JavaScript, PHP, 和 SQL 的默认编码。
2.3 所有的 XML 元素都必须有一个关闭标签
<p>This is a paragraph.</p>
<br />
注释:从上面的实例中,您也许已经注意到 XML 声明没有关闭标签。这不是错误。声明不是 XML 文档本身的一部分,它没有关闭标签。
2.4 XML 标签对大小写敏感
XML 标签对大小写敏感。标签 与标签 是不同的。
必须使用相同的大小写来编写打开标签和关闭标签。
2.5 XML 必须正确嵌套
在 XML 中,所有元素都必须彼此正确地嵌套:
<b><i>This text is bold and italic</i></b>
在上面的实例中,正确嵌套的意思是:由于 元素是在 元素内打开的,那么它必须在 元素内关闭。
2.6 实体引用
在 XML 中,一些字符拥有特殊的意义。
如果把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
在 XML 中,有 5 个预定义的实体引用:
2.7 XML 中的注释
在 XML 中编写注释的语法与 HTML 的语法很相似。
<!-- This is a comment -->
3、XML元素
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上面的实例中, 和 都有 元素内容,因为他们包含其他元素。 元素也有属性(category=“CHILDREN”)。
元素命名规则:
-
XML 元素必须遵循以下命名规则:
-
名称可以包含字母、数字以及其他的字符
-
名称不能以数字或者标点符号开始
-
名称不能以字母 xml(或者 XML、Xml 等等)开始
-
名称不能包含空格
-
可使用任何名称,没有保留的字词。
命名习惯:
使名称具有描述性。使用下划线的名称也很不错:<first_name>、<last_name>。
名称应简短和简单,避免 “-” 字符,避免 “.” 字符,避免 “:” 字符。
XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的命名规则来命名 XML 文档中的元素。
在 XML 中,éòá 等非英语字母是完全合法的,
4、XML属性
XML元素具有属性,类似 HTML。
属性(Attribute)提供有关元素的额外信息。
4.1 XML 属性必须加引号
属性值必须被引号包围,不过单引号和双引号均可使用。比如一个人的性别,person 元素可以这样写:
或者这样也可以:
如果属性值本身包含双引号,可以使用单引号,就像这个实例:
或者可以使用字符实体:
4.2 应尽量使用元素替代属性
因使用属性而引起的一些问题:
- 属性不能包含多个值(元素可以)
- 属性不能包含树结构(元素可以)
- 属性不容易扩展(为未来的变化)
属性难以阅读和维护。请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
4.3 针对元数据的 XML 属性
有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 id 属性是一样的。这个实例向我们演示了这种情况:
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>
上面的 id 属性仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
所以:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。