XML学习和事例
XML可以说是一个小型的数据库
他的所以的标签都是自己定义的
什么是元素
什么是元素看一下 下面的代码
元素有开始标签,元素内容和结束标签组成
看一下面的代码
<note>
是开始标签
`Tove
Jani
Reminder
Don't forget me this weekend!
`是元素内容
是结束标签
完整代码:
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
|
XML语法
标签对大小写敏感
必须正确嵌套
代码
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
|
代码介绍
这个是和html的<!DOCTYPE html>
差不多
1
| <?xml version="1.0" encoding="UTF-8"?>
|
下面这个是根元素
下面这4个都是子元素
1 2 3 4
| <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body>
|
DTD学习和事例
他有两种声明方式,内部和外部
XML的内部DTD声明
声明格式
!DOCTYPE 用来声明限制根元素的
!ELEMENT 用来声明限制元素的
1
| <!DOCTYPE 根元素 [!ELEMENT 内部元素]>
|
事例和!ELEMENT的限制
!ELEMENT 用来声明限制元素的
声明只能出现一次的子元素
正确代码:
下面的代码介绍
第二行!DOCTYPE 声明名字是note
的根元素
第三行!ELEMENT 限制note
根元素必须有一个to
的子元素
第三行!ELEMENT 有限制了to
的子元素限制成#PCDATA
的类型
#PCDATA
的类型介绍在下面
1 2 3 4 5 6 7 8
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to)> <!ELEMENT to (#PCDATA)> ]> <note> <to>aaaaa</to> </note>
|
错误的代码:
错误介绍
其他的解释上面都说了
报错的原因是
在第三行 !ELEMENT 设置了note
根元素就只限制了一个子元素to
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to)> <!ELEMENT to (#PCDATA)> ]> <note> <to>aaaaa</to> <to>bbbbb</to> </note>
|

声明最少出现一次子元素用’+’
上面的只能出现一次的子元素声明了两个to
就报错了
我们加上+
可以就可以解决这个问题了,但是必须有一个to
子元素
下面的代码介绍:
其他代码就不说了
主要在第三行加了一个+
意思就是!ELEMENT 限制 根元素note
必须有一个或者多个to
的子元素
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to+)> <!ELEMENT to (#PCDATA)> ]> <note> <to>aaaaa</to> <to>bbbbb</to> </note>
|
零次或多次的元素用’*’
下面代码的意思
!DOCTYPE 声明根元素是note
主要在第三行加*
他限制零次或多次的元素 意思就是!ELEMENT 限制note
根元素的子元素to*
出现几次都可以
!ELEMENT
代码
1 2 3 4 5 6 7 8 9 10
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to*)> <!ELEMENT to (#PCDATA)> ]> <note> <to>aaaaa</to> <to>bbbbb</to> <to>ccccc</to> </note>
|
他声明多个to
子元素没有报错

声明出现零次或一次的元素用’?’
下面代码的意思
!DOCTYPE 声明根元素是note
主要在第三行加?
意思就是!ELEMENT 限制了note
根元素的子元素to?
只能出现零次或一次to
的元素
!ELEMENT
代码
1 2 3 4 5 6 7 8
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to?)> <!ELEMENT to (#PCDATA)> ]> <note> </note>
|
没有声明to
元素他没有报错

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to*)> <!ELEMENT to (from,heading)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to> <from>Jani</from> <heading>Reminder</heading> </to> <to> <from>Jani</from> <heading>Reminder</heading> </to> </note>
|
属性声明语法
什么是属性
看一下,下面的html代码
src
就是属性
a.png
就是属性的值
XML属性值必须用” “
属性声明格式
属性生明用的是!ATTLIST
1
| <!ATTLIST 元素名称 属性名称 属性类型 默认值>
|
下面是属性的类型
常用的是CDATA
,就是字符串类型

他的默认值

属性事例
下面代码说明
第二行!DOCTYPE 声明名字是note
的根元素
第三行!ELEMENT 限制note
根元素必须有一个to
的子元素
第三行!ELEMENT 有限制了to
的子元素限制里面必须有a
和b
子元素
第四行!ATTLIST 被添加元素的是to
子元素,属性名是id
,类型是CDATA
是字符类型的,#REQUIRED
意思是属性值是必需的
第五行和第六行 都是声明a
和c
子元素的类型的
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to)> <!ELEMENT to (a,c)> <!ATTLIST to id CDATA #REQUIRED> <!ELEMENT a (#PCDATA)> <!ELEMENT c (#PCDATA)> ]> <note> <to id="1"> <a>a</a> <c>b</c> </to> </note>
|

XML的外部DTD声明
他的dtd声明在XML内部声明已经说了
外部声明用SYSTEM
1
| <!DOCTYPE 根元素 SYSTEM [文件地址]>
|
事例
下面这个是XML的内部DTD声明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ELEMENT note (to+)> <!ELEMENT to (from,heading)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to> <from>Jani</from> <heading>Reminder</heading> </to> <to> <from>Jani</from> <heading>Reminder</heading> </to> </note>
|
叫上面这个改成外部声明很简单
例:
a.xml文件
内容
1 2 3 4 5 6 7 8 9 10 11 12
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note SYSTEM "a.dtd"> <note> <to> <from>Jani</from> <heading>Reminder</heading> </to> <to> <from>Jani</from> <heading>Reminder</heading> </to> </note>
|
a.dtd文件
内容
1 2 3 4 5 6
| <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT note (to+)> <!ELEMENT to (from,heading)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
|
看一下结果可以的