您的位置:首页 > 其它

day06_schema

2017-12-15 19:18 127 查看
一、schema约束

dtd语法:

<!ELEMENT 元素名称 约束>


schema符合xml的语法,xml语句

一个xml中可以有多个schema,多个schema使用名称空间区分,如Java的包名

dtd里面有PCDATA类型,但是在schema里面可以支持多种数据类型(如 年龄,只能是整数,但schema可以定义一个整数类型)

语法更复杂,不能替代dtd

二、快速入门

w3c提供了属性和标签—>创建schema文件(.xsd)—>约束xml文件

根结点的名称为Schema

1,简单元素和复杂元素

<element name="person">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>


2,被约束文件中,如xml,引入约束文件

<person
//解释如下:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
--表示xml是一个被约束文件

xmlns="http://www.example.org/1"
--表示约束文档里面的targetNamespace,url地址

xsi:schemaLocation="http://www.example.org/1 1.xsd">
--targetNamespace 空格 约束文档的地址路径


3.标签和属性

sequence:表示元素出现的顺序

all:元素只能出现一次

choice:只能出现其中一个

any:表示任意元素

maxOccurs=“unbounded” 表示出现次数没限制

<element name="name" type="double" maxOccurs="unbounded"/>


定义属性(必须是复杂元素):(写在 /complexType>之前)

use=”required”属性是否必须出现

<attribute name="p1" type="string" use="required"></attribute>


<!-- 数据文件 引用多个Schema -->
<company xmlns = "http://www.example.org/company"
xmlns:dept="http://www.example.org/department"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/company company.xsd http://www.example.org/department department.xsd"
>
<employee age="30">
<!-- 部门名称 -->
<dept:name>人力资源部</dept:name>
<!-- 员工名称 -->
<name>王晓晓</name>
</employee>
</company>


4.sax解析原理

解析xml两种技术dom和sax

根据xml 的层级结构在内存中分配一个树形结构

把xml中标签,属性,文本封装成对象

sax方式:事件驱动,边读边解析

在javax.xml.parsers包里面

SAXParser

此类的实例,从SAXParserFactory.newSAXParser();获得

paser(File f,DefaultHandler dh)

其中第一个参数:xml路径

第二个参数:事件处理器(把。。传递进来,相当于在方法里绑定了一个事件)自动执行事件

SAXParserFactory

实例newInstance()方法得到

过程:

解析到开始标签,startElement方法,参数qName:返回标签名称

文本内容,characters方法,通过string构造方法,返回内容

结束标签,endElement方法,参数qName,返回标签名称

5.使用jaxp的sax方式解析xml

sax方式,不能增删改,只能查询操作

1.创建解析器工厂

2.创建解析器

3.执行parse方法

4.自己创建一个类,继承DefaultHandler

5.重写类里面的三个方法

获取所有name的值

定义一个成员变量boolean flag=false;

判断开始方法是否是name元素,如果是,flag=true;

如果flag=true时,打印出来里面的内容

结束方法里,再设置成flag=false;

获取第一个name元素值

定义一个成员变量 idx=1;

结束的时候,idx++;

character内容输出里面,判断flag==true && idx==1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml schema