(一)、XML概览
首先让我们下载一个XML编辑器:XMLSpy 2005企业版下载破解方法及其教程
当然你也可以不用XMLSpy编辑器,使用记事本,或者vs2005等等,这取决于你的个人喜爱。
小菜只是想说:如果你使用下XMLSpy,你就会喜欢上它,小菜今天是第一次使用就爱上它了。
小菜不骗人的。:)
<Contacts>
<Person Sex="男">
<Name>小陈</Nane>
<Address>
<Country>中国</Country>
<Province>福建</Province>
<City>福州</City>
</Address>
<Phone>110</Phone>
<Email>小陈@gmail</Email>
</Person>
<Person Sex="女">
<Name>小林</Name>
<Address>
<Country>中国</Country>
<Province>福建</Province>
<City>福州</City>
</Address>
<Phone>112</Phone>
<Email>小林@gmail</Email>
</Person>
</Contacts>
XML文档就这么简单,你应该树立起信心。
小菜想看看XML文档是否真的严谨。
使用IE浏览器打开它。
看来不错,XML设计的很严谨。
2、使用XMLSpy创建上面的XML文档(通讯录)l
上面使用记事本+浏览器,构成了我们的开发平台。不仅麻烦,而且视觉效果很差。
接下来我们来使用一下XMLSpy。
点击Browser会自动提示错误,并且定位到Nane结点。确实方便不是吗?(XMLSpy应该给我颁个奖,这么卖力的帮它宣传)
3、XML也需要约束
XML太方便了,以至于所有人都能打开XML文档修改一番。这也就产生了一个问题,怎么
保证XML文档结构良好。
如果阿扁(也就是的人)想恶作剧一下,修改了XML文档。
把小陈的Sex修改为<xml文件怎么打开Person Sex="不男不女">
添加了结点<傻瓜>你是傻瓜吗?</傻瓜>
在Browser中正常显示出了<Person Sex="不男不女"> 和<傻瓜>你是傻瓜吗?</傻瓜> ,由于你并没有对该XML文档进行相应的约束,所以根本没有错误可言。看来真是糟糕透了,如果被小陈发现了,一定会来个把那该死的阿扁出来。
可见我们需要对XML文档进行约束,所谓无规矩不成方圆。
约束XML文档的方式主要有两种:
DTD(Document Type Definition)文档类型定义
XSD(XML Schema Definition)XML模式定义
(二)、DTD(Document Type Definition)文档类型定义
1、DTD包含在XML中:l
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Contacts [
<!ELEMENT Contacts (Person*)>
<!ELEMENT Person (Name, Address, Phone, Email)>
<!ATTLIST Person Sex (男|女) "男">
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Address (Country, Province, City)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Province (#PCDATA)>
<!ELEMENT City (#PCDATA)>
<!ELEMENT Phone (#PCDATA)>
<!ELEMENT Email (#PCDATA)>
]>
<Contacts>
<Person Sex="不男不女">
<傻瓜>你是傻瓜吗?</傻瓜>
<Name>小陈</Name>
<Address>
<Country>中国</Country>
<Province>福建</Province>
<City>福州</City>
</Address>
<Phone>110</Phone>
<Email>小陈@gmail</Email>
</Person>
<Person Sex="女">
<Name>小林</Name>
<Address>
<Country>中国</Country>
<Province>福建</Province>
<City>福州</City>
</Address>
<Phone>112</Phone>
<Email>小林@gmail</Email>
</Person>
</Contacts>
使用XMLSpy点击Browser会提示错误:
定位到出错位置:Sex="不男不女"
在我们的DTD代码中有:<!ATTLIST Person Sex (男|女) "男">
说明了:Sex为Person元素的属性,为枚举类型,值只能为“男”或“女”,默认值为“男”
改正:将其修改为男。点击Revalidate重新验证。
定位到出错位置:<傻瓜>你是傻瓜吗?</傻瓜>
在我们的DTD代码中没有声明该元素,所以提示错误,将其删除。
点击Revalidate重新验证。
现在没有错误了。
接下来就来说说DTD中的基本语法:
<!DOCTYPE Contacts []>
表示根结点为Contacts。注意这是当DTD包含在XML中使用的。
如果XML是引用外部的DTD文件,就不是这样了,下面会说道。
<!ELEMENT Contacts (Person*)>
ELEMENT Contacts 表示声明元素Contacts,这样就允许XML文档中出现<Contacts></Contacts>
Contacts (Person) 表示元素Contacts包含子元素Person,这样就允许XML文档中出现<Contacts><Person></Person></Contacts>
Person* 表示Person可以出现 0次 到 多次
Person+ 表示元素Person可以出现1次 到 多次
Person? 表示元素Person可以出现 0次 到 1次
<!ELEMENT Person (Name, Address, Phone, Email)>
ELEMENT Person 表示声明元素Person
Person (Name, Address, Phone, Email) 表示Person包含元素Name,Address,Phone,Email而且顺序也固定了。
<!ATTLIST Person Sex (男|女) "男">
ATTLIST Person Sex 表示为Person元素声明属性Sex,为枚举类型,值为:男或者女,默认值为 “男”
<!ELEMENT Name (#PCDATA)>
声明元素Name,#PCDATA表示:Name元素不包含其他子元素而只包含字符数据的元素。
<!ELEMENT Address (Country, Province, City)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Province (#PCDATA)>
<!ELEMENT City (#PCDATA)>
<!ELEMENT Phone (#PCDATA)>
<!ELEMENT Email (#PCDATA)>
和上面的差不多。
还有一些常用的也附带说下:
比如有个XML文档中有个结点:<image id="image1" src="image1.jpg" width="200" height
="300"></image>
要求就省了,直接看对应的dtd代码吧。
<!ELEMENT image EMPTY>
声明元素image,EMPTY表示元素不含有字符数据或子元素,只有属性。
如果出现<image>xxx</image>提示错误
<!ATTLIST image id ID #IMPLIED >
为image元素声明属性id,ID表示属性id为在DTD指定的XML文档中唯一,#IMPLIED表示可以有属性id也可以不出现。
如果出现<image id="image1"></image><image id="image1"></image>出错。
<!ATTLIST image src CDATA #REQUIRED >
为image元素声明属性src,CDATA表示src属性的类型为字符数据,#REQUIRED表示sr
c属性是必须的,必须出现。
<!ATTLIST image width CDATA #REQUIRED >
<!ATTLIST image height CDATA #REQUIRED >
和上面的差不多。
常用的差不多都说了,XMLSpy中也带了几个例子,大家有时间也可以看看。了解了上面的内容后,阅读XMLSpy中的例子代码应该不存在问题。
发布评论