XML入门笔记

来源:互联网 发布:java运维和实施面试题 编辑:程序博客网 时间:2024/06/04 23:21

教程来自: 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文件的某些字符有冲突, 所以用转义字符)
&lt;        <        小于号 
&gt;       >        大于号 
&amp;   &        和 
&apos;   '         单引号 
&quot;    "        双引号 


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暂时基本上没用上.