教程来自: http://www.w3school.com.cn/xml/
XML入门笔记
一. 什么是XML?
XML是EXtensible Markup Language的缩写 (可扩展标记语言)
XML是一种类似于HTML的标记语言
XML是用来描述数据的 (HTML更多用来展示数据, 而XML只要是用来存放数据)
XML的标记不是在XML中预定义的,你必须定义自己的标记
XML使用文档类型定义(DTD)或者模式(Schema)来描述数据 (有效的XML和)
XML使用DTD或者Schema后就是自描述的语言(这个不是很懂)
--------------------------------------------------------------------------------
很明显, XML的自定标记和树状结构可以很好的表现了数据的结构.
二. 一个XML文件
// test.xml
--------------------------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Lin</to>
<from>Ordm</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
--------------------------------------------------------
三. XML文件的语法规范
1. XML标记都是大小写敏感的
2. 所有的XML元素必须合理包含(正确的嵌套顺序)
3. 所有的XML文档必须有一个根元素(XML文档中的第一个元素就是根元素。)
4. 属性值必须使用引号(双引号或者单引号).
5. 使用XML,空白将被保留
6. 使用XML, CR / LF 被转换为 LF
7. XML中的注释 <!-- 这是一个注释 -->
说明 4
<?xml version="1.0" encoding="ISO-8859-1"?>
<note date="12/11/99"> ---> 看这里, date属性值要双引号括起来
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note date="12/'11'/99"> ---> 这也是正确的
<note date='12/"11"/99'> ---> 这也是正确的
四. 一些注意点
1. 可以作为元素的尽量作为为元素, 而不作属性来用(例如上面的date属性, 完全可以作为note的一个元素来用<date>12/11/99</date>).
2. 一个结构良好的XML文档应该使用正确的语法。一个有效的XML文档应该遵守DTD的描述。一个有效的XML文档也是一个结构良好的XML文档,同时还必须符合DTD的规则。
3. XML Schema(XML模式)是基于XML的DTD的替代品。
4. XML也有命名空间.
4.1 命名空间的语法 xmlns:namespace-prefix="namespace"
<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.w3schools.com/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
4.2 默认命名空间语法 <element xmlns="namespace">
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table xmlns="http://www.w3schools.com/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
5. 转义字符
(就是内容包含这些字符时, 会与XML文件的某些字符有冲突, 所以用转义字符)
< < 小于号
> > 大于号
& & 和
' ' 单引号
" " 双引号
6. CDATA部件
在CDATA内部的所有内容都会被解析器忽略。
一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束:
<script>
<![CDATA[<table>a</table>
]]>
</script>
上面的<table>a</table>是不被解析的.
CDATA部件不能嵌套
7. 常用编码
<?xml version="1.0" encoding="gb2312"?>
<?xml version="1.0" encoding="gbk"?>
<?xml version="1.0" encoding="UTF-8"?>
五. 小结:
以前也用过XML, 也是人云亦云, 说XML怎么好用好用. 用用停停.
1. 我用的XML的情况也不是很多, 主要用来做一些配置, 某程序要把配置记录下来, 可以使用ini文件, 但是ini有一些缺点
例如有这么一个结构
struct STSetting
{
int a;
int b;
int c;
}
STSetting stSetting[3];
// 把stSetting[3]记录到ini中, 那么ini文件就是这样子了:
;------------------------------------------------------------
[Setting]
STSettingCount = 3
[STSetting0]
a = 1
b = 2
c = 3
[STSetting1]
a = 4
b = 5
c = 6
[STSetting2]
a = 7
b = 8
c = 9
;------------------------------------------------------------
// 把stSetting[3]记录到xml中, 那么xml文件就是这样子了:
<Setting>
<STSetting>
<a>1</a>
<b>2</b>
<c>3</c>
</STSetting>
<STSetting>
<a>4</a>
<b>5</b>
<c>6</c>
</STSetting>
<STSetting>
<a>7</a>
<b>8</b>
<c>9</c>
</STSetting>
</Setting>
;------------------------------------------------------------
在解析ini时, STSettingCount = 3特别别扭, ini文件不能控制到我的解析流程, 一不留神就出错了(例如STSettingCount = 4, 那就多了一个空的了), 而XML很明显, 比较真实的反映了STSetting的结构. 体会一下吧.
2. 对于配置, 我只用一个结构良好的XML文档就足够了, 那些DTD, Schema, XSL暂时基本上没用上.