XML_DTD
来源:互联网 发布:lua 脚本 java 编辑:程序博客网 时间:2024/06/06 01:20
一 XML约束
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
需要XML约束的原因
xml由于是可扩展的标记语言,所以在xml文件中的编写太过于自由,这样在很多种情况下并不合适。
常用的约束技术
XML DTD
DTD文件的后缀名为 .dtd
DTD文件有自己独立的语法规范
XML Schema
Schema文件的后缀名为 .xsd
Schema文件符合xml语法规范
二 DTD Document Type Define
DTD的定义:描述元素、属性和其他杂项在xml文档中的使用规则的说明
DTD的分类:外部的DTD 内部的DTD 混合的DTD
1).内部的DTD:DTD和xml文档在同一个文件中
例如:
student1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students[
<!ELEMENT students (stu+)>
<!ELEMENT stu (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<students>
<stu>
<id>1</id>
<name>tom</name>
<age>20</age>
</stu>
</students>
2).外部的DTD:DTD和xml文档不在同一个文件中
例如:
xml/student2.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "../dtd/student.dtd">
<students>
<stu>
<id>1</id>
<name>tom</name>
<age>20</age>
</stu>
</students>
dtd/student.dtd文件:
<!ELEMENT students (stu+)>
<!ELEMENT stu (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
3).混合的DTD:既有外部DTD,又有内部DTD
例如:
xml/student3.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "../dtd/student.dtd"[
<!ELEMENT stu (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<students>
<stu>
<id>1</id>
<name>tom</name>
<age>20</age>
</stu>
</students>
dtd/student.dtd文件:
<!ELEMENT students (stu+)>
外部的DTD
引用外部dtd的时候又分为俩种:
SYSTEM表示引用的dtd文件在本地
例如:
<!DOCTYPE students SYSTEM "../dtd/student.dtd">
PUBLIC表示引用的dtd文件是一个公共的文件
格式:注意里面是可以加回车换行的
<!DOCTYPE 根元素 PUBLIC "" "">
例如:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
在后面的"如何在Eclipse中给xml文件添加标签自动提示功能"的部分再做说明
DTD的目的:
验证该xml文档是否是有效的xml文档
如果一个良构的xml文档满足了DTD的声明就是一个有效的xml文档。
注意:良构 不一定 有效,但是有效一定良构
DTD对xml文件中元素的约束:
格式:<!ELEMENT 元素名 (内容模式)>
内容模式:
1).EMPTY:元素不能包含子元素和文本(空元素)
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu EMPTY>
xml文件:
<students>
<!--这个stu元素中的内容必须为空-->
<stu></stu>
</students>
2).(#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu (#PCDATA)>
xml文件:
<students>
<stu>tom</stu>
</students>
3).ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu ANY>
xml文件:
<students>
<stu>tom</stu>
</students>
或者
<students>
<stu>
<name>tom</name>
</stu>
</students>
4).修饰符:() | + * ? , 默认修饰符
() 来给元素分用组
| 在列出的元素中选择一个
例如:
dtd文件:
<!ELEMENT students (stu|student)>
xml文件:
<students>
<!--这里只能出现stu元素或者student元素-->
<!--俩个元素任选其一,不能同时出现-->
</students>
+ 该元素最少出现一次,可以出现多次 (1或n次)
例如:
dtd文件:
<!ELEMENT students (stu+)>
xml文件:
<students>
<stu></stu>
<stu></stu>
<stu></stu>
</students>
* 该元素允许出现零次到任意多次(0到n次)
例如:
dtd文件:
<!ELEMENT students (stu*)>
xml文件:
<students>
<!--stu出现0次到n次-->
<stu></stu>
<stu></stu>
<stu></stu>
</students>
? 该元素可以出现,但只能出现一次 (0到1次)
例如:
dtd文件:
<!ELEMENT students (stu?)>
xml文件:
<students>
<!--stu出现0次到1次-->
<stu></stu>
</students>
, 对象必须按指定的顺序出现
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (id,name,age)>
xml文件:
<students>
<stu>
<id></id>
<name></name>
<age></age>
</stu>
</students>
默认修饰符 就是什么修饰符都没有加
例如:
dtd文件:
<!ELEMENT students (stu)>
xml文件:
<students>
<!--这里只能出现stu元素1次-->
<!--stu元素不出现也验证不通过-->
<stu></stu>
</students>
5).混合元素 子元素是任意类型 出现任意次数 并且没有出现顺序要求
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA|id|name|age)*>
xml文件:
<students>
<stu></stu>
<stu>
<id></id>
<name></name>
<age></age>
</stu>
<stu>tom</stu>
</students>
注意:
1 根元素students里面可以出现stu子元素0到n次
2 stu元素中可以写文本也可以写id、name、age子元素
3 id、name、age子元素出现的顺序没有要求
4 id、name、age子元素可以都出现也可以都不出现
注意:浏览器是非验证的解析器,不会验证xml的有效性
可以使用Eclipse去验证xml的有效性
DTD对xml文件中属性的约束:
格式:<!ATTLIST 元素名称
属性名称 值类型 属性特点
属性名称 值类型 属性特点
>
属性类型:
1).CDATA:属性值可以是任何字符(包括数字和中文)
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id CDATA #REQUIRED
name CDATA #REQUIRED
>
xml文件:
<students>
<stu id="1" name="tom"></stu>
</students>
2).ID:属性值必须唯一,属性值必须满足xml命名规则
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
name CDATA #REQUIRED
>
xml文件:
<students>
<stu id="A1" name="tom"></stu>
<stu id="B1" name="tom"></stu>
</students>
注意:
1. id和name属性必须出现
2. id属性的值必须满足xml名字规范,例如不能数字开头
3. id属性的值不能重复
4. 多个属性的出现是没有顺序要求的
3).IDREF/IDREFS
IDREF属性的值指向文档中其它地方声明的ID类型的值。
IDREFS同IDREF,但是可以具有由空格分开的多个引用。
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
pid IDREFS #IMPLIED
name CDATA #REQUIRED
>
xml文件:
<students>
<stu id="A1" name="tom"></stu>
<stu id="B1" name="tom"></stu>
<stu id="C1" name="tom" pid="A1 B1"></stu>
</students>
注意:
1. id和name属性必须出现
2. pid属性出现可以,不出现也可以
3. id属性的值必须满足xml名字规范,例如不能数字开头
4. id属性的值不能重复
5. pid属性的值必须是引用其他stu元素的id值
6. pid属性的值可以是多个,使用空格隔开
7. 多个属性的出现是没有顺序要求的
4).enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
name CDATA #REQUIRED
gender (男|女) #REQUIRED
>
xml文件:
<students>
<stu id="A1" name="tom" gender="男"></stu>
<stu id="B1" name="tom" gender="女"></stu>
</students>
注意:
1. id/name/gender属性必须出现
2. id属性的值必须满足xml名字规范,例如不能数字开头
3. id属性的值不能重复
4. gender属性的值必须是男或者女
5. 多个属性的出现是没有顺序要求的
属性特点:
1).#REQUIRED:元素的所有实例都必须有该属性
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #REQUIRED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
</students>
注意:
1. name属性必须出现
2. name属性的值可以为空也可以不为空
2).#IMPLIED :属性可以不出现
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性的值可以为空也可以不为空
3).default-value:属性可以不出现,并且当它不出现的时候是有默认值的,而该属性的默认值就是atttibute-value
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA "tom"
>
xml文件:
<students>
<stu name="zhangsan"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性如果不出现则默认值为tom
4).#FIXED :属性可以不出现,但是如果出现的话必须是指定的属性值
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
school CDATA #FIXED "briup"
>
xml文件:
<students>
<stu school="briup"></stu>
<stu></stu>
</students>
注意:
1. name/school属性可以出现也可以不出现
2. school属性如果出现那么值一定要是briup
DTD文档的一个实例:
dtd文档:
<!ELEMENT students (student+)>
<!ELEMENT student (name,age?,score*)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name firstName CDATA #IMPLIED>
<!ELEMENT age (#PCDATA)>
<!ATTLIST age xuAge CDATA #FIXED "20">
<!ELEMENT score (#PCDATA)>
<!ATTLIST score sel (60|80|100) #REQUIRED>
利用DTD文件在Eclipse中给xml文件添加标签自动提示功能
利用schame文件在Eclipse中给xml文件添加标签自动提示功能
三 XML的解析
(一)SAX解析
SAX:基于事件处理的机制
sax解析xml文件时,遇到开始标签,结束标签,开始解析文件,文件解析结束,字符内容,空白字符等都会触发各自的方法。
优点:
适合解析大文件,对内存要求不高
轻量级的解析数据方式,效率更高
缺点:
不能随机解析
不能修改XML文件,只能进行查询
(二)DOM解析:
采用dom解析,会将xml文档全部载入到内存当中,然后将xml文档
中的所有内容转换为tree上的节点(对象)。
优点:
可以随机解析
可以修改文件
可以创建xml文件
缺点:
适合解析小文件,对内存要求高
-------------------------------------------
XML解析分为:dom解析和sax解析
dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。
sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准(相当于是一个民间标准),几乎所有的 XML 解析器都支持它。
dom和sax都是一种模型/标准/理论,是需要其他人使用具体的代码去实现的
xml解析器就是用来对dom或者sax解析标准的具体实现
XML解析器
sun公司的解析器Crimson
IMB公司的解析器Xerces 已经捐献给apache组织
dom4j组织的解析器Aelfred2
sun公司根据自己的解析器推出了解析xml的API Jaxp
Java API for XMLProcessing,意为XML处理的Java API
dom4j组织根据自己的解析器推出了解析xml的API dom4j
dom4j是一个Java解析XML的API,
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
需要XML约束的原因
xml由于是可扩展的标记语言,所以在xml文件中的编写太过于自由,这样在很多种情况下并不合适。
常用的约束技术
XML DTD
DTD文件的后缀名为 .dtd
DTD文件有自己独立的语法规范
XML Schema
Schema文件的后缀名为 .xsd
Schema文件符合xml语法规范
二 DTD Document Type Define
DTD的定义:描述元素、属性和其他杂项在xml文档中的使用规则的说明
DTD的分类:外部的DTD 内部的DTD 混合的DTD
1).内部的DTD:DTD和xml文档在同一个文件中
例如:
student1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students[
<!ELEMENT students (stu+)>
<!ELEMENT stu (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<students>
<stu>
<id>1</id>
<name>tom</name>
<age>20</age>
</stu>
</students>
2).外部的DTD:DTD和xml文档不在同一个文件中
例如:
xml/student2.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "../dtd/student.dtd">
<students>
<stu>
<id>1</id>
<name>tom</name>
<age>20</age>
</stu>
</students>
dtd/student.dtd文件:
<!ELEMENT students (stu+)>
<!ELEMENT stu (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
3).混合的DTD:既有外部DTD,又有内部DTD
例如:
xml/student3.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "../dtd/student.dtd"[
<!ELEMENT stu (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<students>
<stu>
<id>1</id>
<name>tom</name>
<age>20</age>
</stu>
</students>
dtd/student.dtd文件:
<!ELEMENT students (stu+)>
外部的DTD
引用外部dtd的时候又分为俩种:
SYSTEM表示引用的dtd文件在本地
例如:
<!DOCTYPE students SYSTEM "../dtd/student.dtd">
PUBLIC表示引用的dtd文件是一个公共的文件
格式:注意里面是可以加回车换行的
<!DOCTYPE 根元素 PUBLIC "" "">
例如:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
在后面的"如何在Eclipse中给xml文件添加标签自动提示功能"的部分再做说明
DTD的目的:
验证该xml文档是否是有效的xml文档
如果一个良构的xml文档满足了DTD的声明就是一个有效的xml文档。
注意:良构 不一定 有效,但是有效一定良构
DTD对xml文件中元素的约束:
格式:<!ELEMENT 元素名 (内容模式)>
内容模式:
1).EMPTY:元素不能包含子元素和文本(空元素)
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu EMPTY>
xml文件:
<students>
<!--这个stu元素中的内容必须为空-->
<stu></stu>
</students>
2).(#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu (#PCDATA)>
xml文件:
<students>
<stu>tom</stu>
</students>
3).ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu ANY>
xml文件:
<students>
<stu>tom</stu>
</students>
或者
<students>
<stu>
<name>tom</name>
</stu>
</students>
4).修饰符:() | + * ? , 默认修饰符
() 来给元素分用组
| 在列出的元素中选择一个
例如:
dtd文件:
<!ELEMENT students (stu|student)>
xml文件:
<students>
<!--这里只能出现stu元素或者student元素-->
<!--俩个元素任选其一,不能同时出现-->
</students>
+ 该元素最少出现一次,可以出现多次 (1或n次)
例如:
dtd文件:
<!ELEMENT students (stu+)>
xml文件:
<students>
<stu></stu>
<stu></stu>
<stu></stu>
</students>
* 该元素允许出现零次到任意多次(0到n次)
例如:
dtd文件:
<!ELEMENT students (stu*)>
xml文件:
<students>
<!--stu出现0次到n次-->
<stu></stu>
<stu></stu>
<stu></stu>
</students>
? 该元素可以出现,但只能出现一次 (0到1次)
例如:
dtd文件:
<!ELEMENT students (stu?)>
xml文件:
<students>
<!--stu出现0次到1次-->
<stu></stu>
</students>
, 对象必须按指定的顺序出现
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (id,name,age)>
xml文件:
<students>
<stu>
<id></id>
<name></name>
<age></age>
</stu>
</students>
默认修饰符 就是什么修饰符都没有加
例如:
dtd文件:
<!ELEMENT students (stu)>
xml文件:
<students>
<!--这里只能出现stu元素1次-->
<!--stu元素不出现也验证不通过-->
<stu></stu>
</students>
5).混合元素 子元素是任意类型 出现任意次数 并且没有出现顺序要求
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA|id|name|age)*>
xml文件:
<students>
<stu></stu>
<stu>
<id></id>
<name></name>
<age></age>
</stu>
<stu>tom</stu>
</students>
注意:
1 根元素students里面可以出现stu子元素0到n次
2 stu元素中可以写文本也可以写id、name、age子元素
3 id、name、age子元素出现的顺序没有要求
4 id、name、age子元素可以都出现也可以都不出现
注意:浏览器是非验证的解析器,不会验证xml的有效性
可以使用Eclipse去验证xml的有效性
DTD对xml文件中属性的约束:
格式:<!ATTLIST 元素名称
属性名称 值类型 属性特点
属性名称 值类型 属性特点
>
属性类型:
1).CDATA:属性值可以是任何字符(包括数字和中文)
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id CDATA #REQUIRED
name CDATA #REQUIRED
>
xml文件:
<students>
<stu id="1" name="tom"></stu>
</students>
2).ID:属性值必须唯一,属性值必须满足xml命名规则
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
name CDATA #REQUIRED
>
xml文件:
<students>
<stu id="A1" name="tom"></stu>
<stu id="B1" name="tom"></stu>
</students>
注意:
1. id和name属性必须出现
2. id属性的值必须满足xml名字规范,例如不能数字开头
3. id属性的值不能重复
4. 多个属性的出现是没有顺序要求的
3).IDREF/IDREFS
IDREF属性的值指向文档中其它地方声明的ID类型的值。
IDREFS同IDREF,但是可以具有由空格分开的多个引用。
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
pid IDREFS #IMPLIED
name CDATA #REQUIRED
>
xml文件:
<students>
<stu id="A1" name="tom"></stu>
<stu id="B1" name="tom"></stu>
<stu id="C1" name="tom" pid="A1 B1"></stu>
</students>
注意:
1. id和name属性必须出现
2. pid属性出现可以,不出现也可以
3. id属性的值必须满足xml名字规范,例如不能数字开头
4. id属性的值不能重复
5. pid属性的值必须是引用其他stu元素的id值
6. pid属性的值可以是多个,使用空格隔开
7. 多个属性的出现是没有顺序要求的
4).enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id ID #REQUIRED
name CDATA #REQUIRED
gender (男|女) #REQUIRED
>
xml文件:
<students>
<stu id="A1" name="tom" gender="男"></stu>
<stu id="B1" name="tom" gender="女"></stu>
</students>
注意:
1. id/name/gender属性必须出现
2. id属性的值必须满足xml名字规范,例如不能数字开头
3. id属性的值不能重复
4. gender属性的值必须是男或者女
5. 多个属性的出现是没有顺序要求的
属性特点:
1).#REQUIRED:元素的所有实例都必须有该属性
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #REQUIRED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
</students>
注意:
1. name属性必须出现
2. name属性的值可以为空也可以不为空
2).#IMPLIED :属性可以不出现
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性的值可以为空也可以不为空
3).default-value:属性可以不出现,并且当它不出现的时候是有默认值的,而该属性的默认值就是atttibute-value
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA "tom"
>
xml文件:
<students>
<stu name="zhangsan"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性如果不出现则默认值为tom
4).#FIXED :属性可以不出现,但是如果出现的话必须是指定的属性值
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name CDATA #IMPLIED
school CDATA #FIXED "briup"
>
xml文件:
<students>
<stu school="briup"></stu>
<stu></stu>
</students>
注意:
1. name/school属性可以出现也可以不出现
2. school属性如果出现那么值一定要是briup
DTD文档的一个实例:
dtd文档:
<!ELEMENT students (student+)>
<!ELEMENT student (name,age?,score*)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name firstName CDATA #IMPLIED>
<!ELEMENT age (#PCDATA)>
<!ATTLIST age xuAge CDATA #FIXED "20">
<!ELEMENT score (#PCDATA)>
<!ATTLIST score sel (60|80|100) #REQUIRED>
利用DTD文件在Eclipse中给xml文件添加标签自动提示功能
利用schame文件在Eclipse中给xml文件添加标签自动提示功能
三 XML的解析
(一)SAX解析
SAX:基于事件处理的机制
sax解析xml文件时,遇到开始标签,结束标签,开始解析文件,文件解析结束,字符内容,空白字符等都会触发各自的方法。
优点:
适合解析大文件,对内存要求不高
轻量级的解析数据方式,效率更高
缺点:
不能随机解析
不能修改XML文件,只能进行查询
(二)DOM解析:
采用dom解析,会将xml文档全部载入到内存当中,然后将xml文档
中的所有内容转换为tree上的节点(对象)。
优点:
可以随机解析
可以修改文件
可以创建xml文件
缺点:
适合解析小文件,对内存要求高
-------------------------------------------
XML解析分为:dom解析和sax解析
dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。
sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准(相当于是一个民间标准),几乎所有的 XML 解析器都支持它。
dom和sax都是一种模型/标准/理论,是需要其他人使用具体的代码去实现的
xml解析器就是用来对dom或者sax解析标准的具体实现
XML解析器
sun公司的解析器Crimson
IMB公司的解析器Xerces 已经捐献给apache组织
dom4j组织的解析器Aelfred2
sun公司根据自己的解析器推出了解析xml的API Jaxp
Java API for XMLProcessing,意为XML处理的Java API
dom4j组织根据自己的解析器推出了解析xml的API dom4j
dom4j是一个Java解析XML的API,