day06_schema

来源:互联网 发布:红酒网络推广方案 编辑:程序博客网 时间:2024/06/06 08:54

一、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;

原创粉丝点击