xml主要用来描述数据,比如配置文件,网络之间传输数据等,并且在android中也经常用xml来布局,,接下来便来学习xml常用的东西
1.XML语法
xml语法分为:
1.1 文档声明
1.2 元素
比如包含demo文本内容的title元素 :<title>demo</title>
不包含文本的元素:<title></title>
1.3 元素属性
比如:<person name="张三">
1.4 注释
1.5 CDATA区
因为在XML元素中, 字符都会被解析器解析出来,像<>&" 这样的字符会被直接报错,示例如下图所示:
所以如果使用元素无法满足数据信息时,则可以通过CDATA来实现,CDATA一般用来存储函数方法,CSS.大量文本等,比如:
<![CDATA[
body {
background: rgb(11,253,216);
}
]]>
1.6 转义字符
由于在XML元素中, 使用<>&" 这样的字符会被直接报错,除了通过CDATA区替代外,我们还可以通过转义字符来实现.
若要在元素中强制使用,需要转义的字符(包括;)有:
示例如下:
2.XML约束
如果xml格式出现出错,则程序将不能正确获取文件内容,为了保证数据的规范性和安全性,所以可以编写一个约束文档来约束xml的书写规范,约束文档可以规范xml中出现的指定元素名称,属性以及出现的顺序.
常用的约束有两种:
3.DTD约束
DTD 可被声明于 XML 文档中,也可作为一个外部引用。
3.1 声明于 XML 文档
如果内部使用,则可以直接在文档声明下面写.格式为"<!DOCTYPE 根元素名称 [ 约束内容 ]>"
示例如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE persons [
<!ELEMENT persons (person+)>
<!ELEMENT person (年龄,性别,其它信息)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)>
<!ELEMENT 其它信息 (#PCDATA)>
<!ATTLIST person
姓名 ID #REQUIRED
国籍 (中国|外国) #IMPLIED
特点 CDATA "吃睡学习"
动物级别 CDATA #FIXED "高级动物"
>
<!ENTITY zhangsanMsgUrl "person/id43645.com">
]>
<persons>
<person 姓名="zhangsan" 国籍="中国" >
<年龄>21</年龄>
<性别>男</性别>
<其它信息>zhangsanMsgUrl </其它信息>
</person>
<person 姓名="lisi" 特点="吃喝玩乐" >
<年龄>21</年龄>
<性别>男</性别>
<其它信息> person/id9945.com </其它信息>
</person>
</persons>
上面的示例,出现了!ELEMENT、!ATTLIST、#REQUIRED等等DTD约束的关键字,接下来我们便来看看这些关键字的作用
!ELEMENT-元素定义
ELEMENT关键字用来声明一个XML元素,语法:<!ELEMENT 元素名称 (使用规则)>
使用规则说明:
!ATTLIST-属性定义
ATTLIST关键字用来约束某个元素的属性信息语法:
<!ATTLIST 元素名称
属性名 属性值类型 约束
属性名 属性值类型 约束
......
>
属性值类型说明
约束说明
3.2 DTD作为外部引用
如果在xml中要使用外部文件的DTD约束,则需要在声明下面写入声明的根元素名以及DTD文件名,格式为"<!DOCTYPE 根元素名称 SYSTEM "文件名称.dtd">"
示例,将3.1的内部使用改为外部引用 persons.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
"<!DOCTYPE persons SYSTEM "persons.dtd">"
<persons>
<person 姓名="zhangsan" 国籍="中国" >
<年龄>21</年龄>
<性别>男</性别>
<其它信息>zhangsanMsgUrl </其它信息>
</person>
<person 姓名="lisi" 特点="吃喝玩乐" >
<年龄>21</年龄>
<性别>男</性别>
<其它信息> person/id9945.com </其它信息>
</person>
</persons>
persons.dtd文件如下:
<!ELEMENT persons (person+)>
<!ELEMENT person (年龄,性别,其它信息)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 性别 (#PCDATA)>
<!ELEMENT 其它信息 (#PCDATA)>
<!ATTLIST person
姓名 ID #REQUIRED
国籍 (中国|外国) #IMPLIED
特点 CDATA "吃睡学习"
动物级别 CDATA #FIXED "高级动物"
>
<!ENTITY zhangsanMsgUrl "person/id43645.com">
4.Schema约束
4.1 示例-创建personSchema.xsd
在eclipse中,点击File->new->other,然后创建XML Schema File文件,名字为personSchema.xsd.内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.example.org/personSchema"
targetNamespace="http://www.example.org/personSchema"
elementFormDefault="qualified"> <!--讲解1-->
<xs:element name='persons'> <!--约束xml根元素为persons-->
<xs:complexType> <!--complexType:定义persons为复合元素-->
<xs:sequence maxOccurs='unbounded '> <!--讲解2-->
<xs:element name='person'> <!--约束persons下的子元素名字必须为person-->
<xs:complexType>
<xs:sequence> <!--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>
讲解1:
xmlns:xs=http://www.w3.org/2001/XMLSchema
xmlns=http://www.example.org/personSchema
targetNamespace="http://www.example.org/personSchema"
讲解2:
<xs:sequence maxOccurs='unbounded'>
4.2 示例-创建对应的XML
然后在eclips中点击 File->new->other,然后创建XML文件,名字为person.xml,然后点击next,然后选择创建基于schema的XML:
再选择我们刚刚写好的personSchema.xsd:
然后设置文件名为person.xml,且内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<p:persons xmlns:p="http://www.example.org/personSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/personSchema personSchema.xsd ">
<p:person>
<p:姓名>p:张三</p:姓名>
<p:性别>p:男</p:性别>
<p:年龄>p:22</p:年龄>
</p:person>
<p:person>
<p:姓名>p:李四</p:姓名>
<p:性别>p:男</p:性别>
<p:年龄>p:17</p:年龄>
</p:person>
</p:persons>
xmlns:p="http://www.example.org/personSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/personSchema personSchema.xsd ">
4.3 验证
如下图所示,假如我们不按照personSchema.xsd约束来写XML,则直接出现error:
未完待续,下章学习java解析xml