概念
- XML(EXtensible Markup Language) ,可拓展标记语言
- 标记,指的的是标记语言,也称标签语言,可以用一系列的标签来对数据进行描述。例如,
<name>tom</name>
- 拓展,指的是用户可以自定义标签
作用
- XML可以作为数据传输的标准
- XML可以作为配置文件
- XML可以持久化数据
- XML 简化平台变更
XML和HTML对比
- XML主要是用来描述数据的
- HTML主要是用来展现数据的
XML语法
文档声明
XML声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
元素
元素:指的就是XML中的标记,这种标记也被称为标签、节点。
一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:
- 不能以数字或部分标点符号开头
- 不能包含空格和特定的几个符号
- 标签必须成对出现,不允许缺省结束标签
- 根元素有且只有一个
- 大小写敏感
- 允许多层嵌套但是不允许交叉嵌套
XML必须包含根元素
根元素有且只能有一个,它是所有其他元素的父元素。
<?xml version="1.0" encoding="utf-8"?>
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
这里的<root>标签就是根元素
元素是可以包含标签体的,也就是在开始标签和结束标签之间写一些内容
元素也可以不包含标签体,也就是在开始标签和结束标签中间什么也不写
<?xml version="1.0" encoding="utf-8"?>
<root>
<child></child>
</root>
对于XML标签中出现的空格和换行,在XML解析程序都会当作标签内容进行处理。
例如,以下俩个<a>标签中的内容是有区别的
<?xml version="1.0" encoding="utf-8"?>
<root>
<child>www.baidu.com</child>
</root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<child>
www.baidu.com
</child>
</root>
XML标签对大小写敏感
标签<Letter>与标签<letter>是不同的。必须使用相同的大小写来编写开始标签和关闭标签。
XML标签允许嵌套但是不允许交叉
例如,
<?xml version="1.0" encoding="utf-8"?>
<root>
<message>
<a>这是错误的</message>
</a>
</root>
属性
属性的功能:提供了元素相关的一些额外信息
一个元素可以有多个属性,它的基本格式为:<元素名 属性名="属性值" 属性名="属性值">
XML 属性写在开始标签中,并且属性值必须加引号,例如,可以是双引用或者也可以是单引用
<?xml version="1.0" encoding="utf-8"?>
<root>
<personse x="female"></person>
<personse x='f'></person>
</root>
如果有多个note标签的时候,可以使用 id进行区别:
<?xml version="1.0" encoding="utf-8"?>
<messages>
<noteid="1">
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>tom</to>
<from>mary</from>
<msg>Together~~~</msg>
</note>
<noteid="2">
<date>
<day>10</day>
<month>02</month>
<year>2008</year>
</date>
<to>tom</to>
<from>mary</from>
<msg>Together~~~</msg>
</note>
</messages>
实体
在 XML 中,一些字符拥有特殊的意义,在XML文档中,是不能直接使用的。
例如,如果把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
XML中实体的格式:&实体名;
XML中预定义实体有,任何用到这些字符的地方,都可以使用实体来代替
实体 | 字符 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |
当然这些预先定义的实体,还支持自定义实体。
定义格式:
<!DOCTYPE 根元素名称[
<!ENTITY 实体名 实体内容>
]>
注释
XML中的注释,和java程序中的注释一样,都是对当前程序作出解释说明的。
<!-- 这是一个注释 -->
使用注释的时候,需要注意以下几点:
- 注释内容中不要出现
- 不要把注释放在标签中间
- 注释不能嵌套
例如,不要把注释放在标签中间、注释不能嵌套
<?xml version="1.0" encoding="utf-8"?>
<root>
<name<!-- 这是说明名字的 --> >briup</name>
</root>
CDATA
在xml中
- 解析器进行解析的内容,称为PCDATA(Parsed CDATA)
- 解析器不会解析的内容,称为CDATA,(Character Data)
因为在一些情况下,我们在xml中编写的特殊内容,例如特殊字符、代码等,并不希望解析器去解析,而是希望把这些内容按字符串原样输出即可,不需要做额外任何解析处理。
这时候,我们就可以把这些内容,写在指定的CDATA区域内即可。
CDATA区域的格式要求:
<![CDATA[需要原样输出的字符串]]>
注意,XML 文档中的所有文本均会被解析器解析。只有 CDATA 区段中的文本会被解析器忽略
注意,在不同浏览器中,对XML解析显示的结果稍有差异
XML命名空间
因为XML文档中的标签,是用户可以自定义的,所以可能在俩个不同的XML文档中,出现相同名字的标签元素。
这个xml中的table标签,表示的是一个表格
<?xml version="1.0" encoding="utf-8"?>
<table>
<tr>
<td>hello</td>
<td>world</td>
</tr>
</table>
这个xml中的table标签,表示的是一张桌子
<?xml version="1.0" encoding="utf-8"?>
<table>
<width>80</width>
<length>120</length>
</table>
这种情况下,可以使用前缀,来避免这样的冲突
<?xml version="1.0" encoding="utf-8"?>
<x:table>
<tr>
<td>hello</td>
<td>world</td>
</tr>
</x:table>
<?xml version="1.0" encoding="utf-8"?>
<y:table>
<width>80</width>
<length>120</length>
</y:table>
其实,这些做法的目的,就是为了让这个自定义的标签具有唯一性,不会和别人定义的冲突。
网友评论