day06_schema

一、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.重写类里面的三个方法

  1. 获取所有name的值

定义一个成员变量boolean flag=false;
判断开始方法是否是name元素,如果是,flag=true;
如果flag=true时,打印出来里面的内容
结束方法里,再设置成flag=false;

  1. 获取第一个name元素值

定义一个成员变量 idx=1;
结束的时候,idx++;
character内容输出里面,判断flag==true && idx==1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值