schema约束
特点:- schema符合xml的语法,里面写的是xml语句,与dtd约束不同,dtd是自成一派
- 一个xml中可以有多个schema,多个schema使用名称空间区分
- dtd里面有PCDATA等类型,但是在schema里面可以支持更多的数据类型,比如年龄只能是整数,schema可以严格的规定整数类型
- 但是schema语法更加复杂,还无法代替dtd
快速入门
1、创建一个schema文件,后缀名是.xsd
根节点:<shema>
在schema文件里面的属性
xmlns=http://www.w3.org/2001/XMLSchema 表示当前是一个约束文件
targetNameSpace=http://www.itcast.cn/20151111使用schema约束文件,直接通过地址引入约束文件
elementFormDefault=“qualified”
2、步骤
- 看xml中有多少个元素,有几个就写几个<element>
- 看是否是简单元素或者复杂元素,简单元素写在复杂元素的里面
如 <element name =“person”>
<complexType>
<sequence>
<element name =“name” type=“string”></element>
<element name=“age” type =“ing”></element>
</sequence>
</complexType>
</element>
3、在被约束文件里面引入约束文件
如<person xmlns:xsi=“http://www.w3.org/2001/XMLSchema” xmlns=“http://www.itcast.cn/20151111” xis:schemaLocation=“http://www.itcast.cn/20151111” 1.xsd>
** xmlns:xsi=“http://www.w3.org/2001/XMLSchema”表示xml是一个被约束文件
** xmlns=“http://www.itcast.cn/20151111”是约束文档里面的targetNameSpace
** xis:schemaLocation=“http://www.itcast.cn/20151111” 1.xsd
格式:targetNamespace 空格 约束文档的路径
<sequence>:表示元素按照顺序出现
<all>:表示元素只能出现一次
<choice>:表示元素只能出现其中一个
maxOccurs=“unbounded”:表示元素出现的次数无限制
<any>:表示任意元素
约束属性,写在复杂元素里面,位置 </complexType>之前
<attribute name =“id1” type=“int” use=“required”> </attribute>
name:属性名称 type:属性类型 use:属性是否必须出现
SAX解析
-SAXParser 通过SAXParserFactory.new SAXParser()方法获得
- parse(File f,DefaultHandler ) 路径,事件处理器
startElement(String url, String location, String qname, Attributes attribute )
characters(char[] ch ,int start, int length)
endElement(String url, String location, String qname)
- SAXParserFactory 方法 newInstance
4、使用jaxp的sax方式解析xml
sax方式不能实现增删改操作,只能进行查询操作
-1、创建解析器工厂
-2、创建解析器
-3、执行parse方法
-4、自己创建一个类,继承DefaultHandler
5、重写继承的3个方法:startElement、characters、endElement
6、获取所有的name元素的值
-定义一个成员变量 flag=false
-判断开始放松是否是name元素,如果是name元素,把flag设置为true
-如果flag值是true,在characters方法里面打印内容
-当执行到结束方法时候,把flag设置为true
7、获取第一个name元素的值
-定义一个成员变量 inx=1
-在结束方法时候,idx+1 idx++
-想要打印出第一个name元素的的值
在characters方法里面判断
判断flag=true 并且idx==1,再打印内容