XML 简要

前言

XML 是可扩展标记语言,本文整理自W3School
关于 XML 的简介、用途以及与 HTML 的区别,请参考以下链接,本文只列出 XML 的要点:
XML 简介
XML 用途

语法

  • XML 文档的第一行为 XML 声明,定义了 XML 的版本和使用的编码。
  • 第二行为描述文档的根元素,XML 文档必须包含根元素,该元素是所有其他元素的父元素。
  • 所有元素均可拥有文本内容、属性 (类似 HTML) 以及子元素

    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    </note>
  • 所有元素必须有关闭标签

  • XML 对大小写敏感
  • XML 必须正确的嵌套
  • XML 的属性值须加引号,单引号和双引号均可使用
  • XML 的注释为<!-- -->,同 HTML 一样
  • XML 中空格会保留,HTML 会把多个连续的空格裁减为一个
  • XML 以 LF 存储换行。CR回车符,LF换行符

XML 命名规则及最佳实践

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或标点符号开始
  • 名称不能以字符 xmlXMLXml 等开始
  • 名称不能包含空格
  • 避免使用 -.: 字符。最好使用字母、数字以及 _ 下划线

XML 属性

  • 尽量使用元素来描述数据,仅仅使用属性提供与数据无关的信息
  • 元数据应当存储为属性,而数据本身应当存储为元素

XML 验证

  • DTD 文档用于定义 XML 文档的结构
  • SchemaDTD 的代替者
  • 如果 XML 文档存在错误,那么程序不应该继续处理这个文档

XML 样式

  • XML 可以引用 CSS 样式格式化 XML,但不推荐使用该方法,W3C 推荐使用 XSLT

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/css" href="cd_catalog.css"?>
    <CATALOG>
    <CD>
    <TITLE>Empire Burlesque</TITLE>
    <ARTIST>Bob Dylan</ARTIST>
    <COUNTRY>USA</COUNTRY>
    <COMPANY>Columbia</COMPANY>
    <PRICE>10.90</PRICE>
    <YEAR>1985</YEAR>
    </CD>
    <CD>
    <TITLE>Hide your heart</TITLE>
    <ARTIST>Bonnie Tyler</ARTIST>
    <COUNTRY>UK</COUNTRY>
    <COMPANY>CBS Records</COMPANY>
    <PRICE>9.90</PRICE>
    <YEAR>1988</YEAR>
    </CD>
    </CATALOG>
  • XSLT 是首选的 XML 样式表语言

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="simple.xsl"?>
    <breakfast_menu>
    <food>
    <name>Belgian Waffles</name>
    <price>$5.95</price>
    <description>
    two of our famous Belgian Waffles
    </description>
    <calories>650</calories>
    </food>
    </breakfast_menu>

XML 命名空间

当两个相同的 XML 文档被一起使用时,如果两个文档包含不同内容和定义的相同元素,就会发送命名冲突。 为了避免该问题,引入了命名空间的概念。

通过使用前缀来避免命名冲突

1
2
3
4
5
6
7
8
9
10
11
12
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

其中 xmlns 属性为前缀赋予了一个与某个命名空间相关联的限定名称。(可以不使用xmlns,仅仅使用前缀来避免命名冲突)

命名空间属性

命名空间属性被放置于元素的开始标签中,并使用以下语法:

1
xmlns:namespace-prefix="namespaceURI"

默认的命名空间

为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。

1
2
3
4
5
6
7
8
9
10
11
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table xmlns="http://www.w3school.com.cn/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

CDATA

CDATA 部分的所有内容都会被解析器忽略。
CDATA 部分不能包含字符串 ]]>。也不允许嵌套的 CDATA。
标记 CDATA 部分结尾的 ]]> 不能包含空格或折行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>