文章目录
0.xml文件的约束
常见的包括dtd和schema约束
1.dtd的创建
DTD(Document Type Definition),全称为文档类型定义。用于约束xml文件。
步骤:
(1)xml有几个元素,在dtd文件中就写几个 <!ELEMENT>语句
(2)判断元素是简单元素还是复杂元素
- 复杂元素:有子元素的元素 <!ELEMENT 元素名称 (子元素)>
- 简单元素:没有子元素 <!ELEMENT 元素名称 (#PCDATA)>
(3)需要在xml文件中引入dtd文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person SYSTEM "1.dtd">
<person>
<name>zhangsan</name>
<age>20</age>
<a>1111</a>
</person>
1.dtd:
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
2.dtd的三种引入方式
(1)引入外部的dtd文件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
(2)使用内部的dtd文件
<!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
(3)使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
例如:
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
3.dom和sax解析xml区别:
-
dom方式解析
根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象
缺点:如果文件过大,造成内存溢出
优点:很方便实现增删改操作 -
sax方式解析
采用事件驱动,边读边解析
从上到下,一行一行的解析,解析到某一个对象,返回对象名称
缺点:不能实现增删改操作
优点:如果文件过大,不会造成内存溢出,方便实现查询操作
4.schema和dtd约束xml的区别
(1)schema符合xml的语法,使用xml语句。
(2) 一个xml中可以有多个schema,多个schema使用名称空间区分(类似于java包名),而dtd文件只能引入一个
(3)dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型。比如 年龄 只能是整数,在schema可以直接定义一个整数类型
(4)schema语法更加复杂,但是schema目前不能替代dtd,dtd很简单
5.xml引入schema
6.sax的解析过程
7.dom4j支持xpath的操作
可以直接获取到某个元素
- 第一种形式:指定全路径
/AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB
- 第二种形式:指定名称
//BBB: 表示和这个名称相同,表示只要名称是BBB,都得到
- 第三种形式:所有
/*: 所有元素
- 第四种形式:指定名称和索引
BBB[1]: 表示第一个BBB元素
BBB[last()]:表示最后一个BBB元素
- 第五种形式:指定名称和id
//BBB[@id]: 表示只要BBB元素上面有id属性,都得到
- 第六种形式:指定名称和具体id
//BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1
dom4j里面提供了两个方法,用来支持xpath
selectNodes("xpath表达式"):获取多个节点
selectSingleNode("xpath表达式"):获取一个节点