文章目录
XML
可扩展标记语言 Extensible Markup Language
,类似HTML,但和HTML完全不一样。目前遵循xml1.0规范。它是通用的数据交换格式。
允许用户自定义标签。一个标签用于描述一段数据。
XML作用
- 用于客户端
Client
和服务器Server
之间传递数据- 服务器就是装着服务端程序的高配置电脑,配置较高,CPU一般用intel的志强处理器。
- 保存有关系的数据
- 用作软件配置文件
- 对安卓层次来讲,界面布局文件还有
manifest
清单文件 - 提高系统的灵活性
XML语法
文档声明
文档声明出现的位置必须在xml文件第一行
<?xml version="1.0"?>
保存的时候xml
声明的编码要跟文件保存的编码保持一直,如果不声明编码。默认使用的是utf-8
比如:
<?xml version="1.0"?>
<中国>
<河南>
<郑州></郑州>
<洛阳></洛阳>
</河南>
</中国>
中文编码规则:gbk(大概2w汉字)
、gb2312(大概5k汉字)
、utf-8
手动声明编码规则:
<?xml version="1.0" encoding="gbk"?>
还有个standalone
说明文档是否独立,是否依赖其他文档,如:
<?xml version="1.0" encoding="gbk" standalone="yes"?>
元素
元素指文件中出现的标签,一个标签分为起始和结束标签(不能省略),标签是必须闭合的
一个标签允许嵌套标签,但是要注意层次顺序,先开始后闭合,后开始先闭合。
一个XML文档必须有且仅有一个根标签
,其他标签都是其后代标签
<tag></tag>
注意:XML文档并不会忽略\r\n \t
等等
命名规范:
- 区分大小写
- 不能以数字或下划线开头
- 不能用xml保留字
- 不能包含空格
- 名称中间不能包含冒号
:
属性
- 属性要
写在开始标签
中 - 属性名称的命名规范与元素命名规范相同
- 属性一定要用引号(单或双都行)引起来
- 属性可以用子标签的形式来表示
下面这段代码用了两种方式:
<?xml version="1.0"?>
<Persons>
<person name='wzq'>
<firstName>zq</firstName>
<lastName>w</lastName>
</person>
</Persons>
注释
语法格式为:
<!-- 我是注释 -->
注意:
- 注释不能放在第一行,第一行必须是
文档声明
- 注释不能嵌套
- eclipse快捷键
ctrl+shift+/
CDATA区
CDATA里面的内容不会被解析器解析
<![CDATA[]]>
他的作用就是:比如我们的XML文档里面要写一些xml不允许的语法比如大于号>小于号<
等特殊字符,这时候就用CDATA进行声明。
比如:
<?xml version="1.0"?>
<persons>
<person>
<![CDATA[<firstName> <w><w><w> </firstName>]]>
<lastName>wzq</lastName>
</person>
</persons>
特殊字符
对于一些特殊字符,若要在主题元素中显示,必须转义
特殊字符 | 转义替代符号 |
---|---|
& | & |
< | < |
> | > |
" | " |
’ | ' |
XML约束
为什么要使用约束?
XML都是用户自定义的标签,若出现小小的错误,软件程序将不能正确的获取文件中的内容而报错。
-
格式良好的XML:遵顼XML语法的XML
-
有效的XML:遵循约束文档的XML
格式良好的不一定有效,有效的一定格式良好
XML技术中,可以编写一个文档来约束一个XML的书写规范,这个文档称为约束文档
总之:约束文档定义了XML中允许出现的元素名称,属性及元素出现的顺序。
常用的约束技术:
- XML DTD
- XML Schema
DTD(Document Type Definition)
文档类型定义。编码必须使用UTF-8
作用:约束XML书写规范
注意:DTD可以写在单独的文件中,扩展名是dtd
,编码必须是utf-8
引入外部DTD文档
第一种方式:当引用的DTD
文档在本地时,可以这样写:
<!DOCTYPE 根元素 SYSTEM "book.dtd">
比如:
<!DOCTYPE 书架 SYSTEM "book.dtd">
第二种方式:当引用的DTD文档在公共网络上,这样写:
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档URL">
比如:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,lnc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
在文档内部编写
DTD约束文档可以在XML文档种直接定义,(编码没有要求)
DTD语法——定义元素
在DTD文档种使用ELEMENT
关键字来声明一个XML元素
语法:
<!ELEMENT 元素名称 使用规则>
使用规则:
(#PCDATA)
:指示元素内容只能时普通的文本EMPTY
:用于指示元素的主体为空ANY
:用于指示元素的主题内容为任意类型(子元素)
:指示元素种包含的子元素
定义子元素及描述他们的关系:
- 如果子元素用逗号分开,数媒必须按照声明顺序去写XML文档
- 如果子元素用
|
,说明任选其一 - 用
+ * ?
来表示元素出现的此输- 如果子元素后面没有
+ * ?
说明必须出现一次 +
表示至少出现一次*
表示可有可无?
表示0或1次
- 如果子元素后面没有
DTD语法——定义属性
用ATTLIST
关键字来为一个元素声明属性,语法:
<!ATTLIST 元素名称 属性名1 属性值类型 设置说明……>
属性值类型:
CDATA
:表示属性的取值为普通的文本字符串(a|b|c)
:说明只能从中任选其一ID
:表示属性的取值不能重复
设置说明:
#REQUIRED
:表示该属性必须出现#IMPLIED
:表示该属性可有可无#FIXED
:表示属性的取值为一个固定值,语法#FIXED "固定值"
DTD语法——定义引用实体
在DTD中定义,在XML中使用
语法:
<!ENTITY 实体名称 "实体内容">
引用:
&实体名称
DTD约束实例
<?xml version="1.0"?>
<!DOCTYPE 书架(书+)[
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
<!ATTLIST 书
ISBN ID #REQUIRED
COMMENT CDATA #IMPLIED
STYLE (a|b) #IMPLIED
出版社 CDATA "demo"
>
<!ENTITY JY "金庸">
]>
<书架>
<书 ISBN='a' COMMENT='ddd' STYLE='a'>
<书名>射雕英雄传</书名>
<作者>&JY</作者>
<售价>0$</售价>
</书>
<书 ISBN='b' STYLE='b'>
<书名>神雕侠侣</书名>
<作者>金庸</作者>
<售价>0$</售价>
</书>
</书架>
Schema约束
他的出现克服了DTD的局限性,Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd
。
XML Schema VS DTD:
Schema
符合XML语法结构- DOM、SAX等XML API很容易解析出XML Schema文档中的内容
Schema
对namespace支持的很好Schema
比DTD支持更多的数据类型,并支持用户自定义新的数据类型Schema
定义约束的能力非常抢答,可以对XML实例文档做出细致的语义限制Schema
不能像DTD一样定义实体,比DTD更复杂,但Schema
正在逐步替代DTD,在安卓中,清单文件和布局文件用到了Schema技术
。
Schema约束文档示例
这是Schema约束文档
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.lesileqin.com/book"
xmlns:tns="http://www.lesileqin.com/book"
elementFormDefault="qualified">
<xs:element name="书架">
<xs:complexType>
<xs:sequence maxOccurs='unbounded'>
<xs:element name="书">
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string'/>
<xs:element name='作者' type='xs:string'/>
<xs:element name='售价' type='xs:string'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这是对应的xml文件,下面这个xml文件应该完全符合上述schema的标准
<?xml version="1.0" encoding="UTF-8"?>
<tns:书架 xmlns:tns="http://www.lesileqin.com/book" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.lesileqin.com/book book.xsd ">
<tns:书>
<tns:书名>tns:书名</tns:书名>
<tns:作者>tns:作者</tns:作者>
<tns:售价>tns:售价</tns:售价>
</tns:书>
</tns:书架>
Schema教程
请参考这个链接:点我