概念:
XML是一种自描述性文档,它的作用是内容的承载,和展示没有任何关系.所以,如何将XML里的数据以合理的方式取出展示,是XML编程的主要部分.
什么是XML?
1.XML 指可扩展标记语言(EXtensible Markup Language)。
HTML的含义:超文本标记语言(超:图像、音频、文本等)
HTML中内部的标签(预先定义)
2.XML 是一种很像HTML的标记语言。
3.XML 的设计宗旨是传输数据,而不是显示数据。
4.XML 标签没有被预定义。您需要自行定义标签。
5.XML 被设计为具有自我描述性。
6.XML 是 W3C 的推荐标准。
在那些地方使用:
xml是一种数据内容的承载,与数据库相比保存大量数据不同,xml适合保存一些小数据,一些在项目中所需要的内容。
XML的作用:
1.一种文档格式.只是内容的载体.
2.常用来做数据存储,数据传输或者配置描述.
3.它不负责展示.至于里面的内容如何使用,由XML程序来控制
XML字符编码
XML存储时所使用的字符编码. 这个编码告诉解析程序应该使用什么编码格式来对XML解码. 为了国际通用,使用UTF-8吧. 对于纯英文,UTF8只需要一个字节来表示一个英文字符. XML的size也不会太大..
XML的语法规则:
XML文档必须有根元素
XML声明(XML 声明文件的可选部分,如果存在需要放在文档的第一行)
所有的 XML 元素都必须有一个关闭标签
XML 标签对大小写敏感
XML 必须正确嵌套
XML 属性值必须加引号
在 XML 中,空格会被保留
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
1)XML 被设计用来传输和存储数据,其焦点是数据的内容。
2)HTML 被设计用来显示数据,其焦点是数据的外观。
3)HTML 旨在显示信息,而 XML 旨在传输信息。
DTD的元素
1、DTD中的元素(ELEMENT)是用来约束XML文件中的标记,
<!ELEMENT 标记名称 标记的约束条件 >
<!ELEMENT 列车时刻表 (T28次,T29次) >
约束标记“列车时刻表” 只可以有且必须有两个子标记“T28次”和“T29次”。
2、规定标记的子标记
<!ELEMENT 标记名称 (子标记列表) >
<!ELEMENT 开车时间 (hour,minute) >
要求标记“开车时间” 恰好有两个子标记“hour”和“minute”,不可以有能显示的文本数据,
并且子标记在父标记“开车时间”中出现的顺序必须是“hour”、“minute”
而不是 “minute”、“hour”.
3、限制标记只有文本数据
<!ELEMENT 标记名称 (#PCDATA) >
4、定义混合元素(既有字符串内容,又包含子元素)
<!ELEMENT 父元素名 (#PCDATA) | 子元素1 | 子元素2
5、EMPTY和ANY
如果准备约束一个标记是空标记,或者是只含有空字符的非空标记,
元素的“标记的约束条件”可以是关键字“EMPTY”;
如果不准备对一个标记有任何约束,元素的“标记的约束条件”可以是关键字“ANY”。
<!ELEMENT speak EMPTY >
<!ELEMENT hello ANY >
DTD中的属性
1、ATTLIST声明
DTD中的属性列表(ATTLIST)可用来约束XML文件中标记的属性,在DTD中属性列表的声明格式为:
<!ATTLIST 标记名称
属性名称 属性类型 默认值情况
属性名称 属性类型 默认值情况
… ….
>
(1)属性名称
属性名称的命名规则和标记的命名规则相同,可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。
(2)属性类型
我们已经知道属性值一定是一个字符串,那么属性类型就决定了属性可以用怎样的字符串作为属性的值。
(3)默认值情况
ATTLIST声明是为了约束XML文件中标记的属性,ATTLIST声明中关于属性的“默认值情况”是对XML文件中标记的属性进行约束的细节条件
属性的默认值可以是字符串、关键字(#IMPLIED、#REQUIRED、#FIXED)
#REQUIRED:必要的属性,意味着必须为该元素提供该属性
<!ATTLIST 作者 地址 CDATA #REQUIRED>
#IMPLIED:该属性是可有可无的
#FIXED:该属性的值是固定的,定义时必须指定固定的值
<!ATTLIST 作者 地址 CDATA #FIXED “广州”>
属性类型:
1、CDATA类型(该属性的值可以是任何一个字符串)
注意:字符串中不能含有含有左尖括号、右尖括号、与符号、单引号和双引号
2、枚举类型:
<!ATTLIST 肉 类型(鸡|牛肉|猪肉|鱼肉) #REQUIRED>
3、NMTOKEN类型
如果属性的类型是NMTOKEN类型的属性,属性值可以
由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,
属性值中不能含有空格字符(属性值也可以用数字、点或连字符开头)
4、NMTOKENS类型
对于NMTOKEN类型的属性,其属性值中不能含有空白类字符。
如果需要某个属性的属性值含有空白类字符,而且被空白分隔开的子字符串符合NMTOKEN类型属性的属性值之规定,
那么就可以将属性的类型取为NMTOKENS类型。
dom解析原理示意图:
SAX解析原理示意图:
附(内含详细文档):https://download.csdn.net/download/qq_39657597/10383592