1.schema约束
dtd语法: <!ELEMENT 元素名称 约束>
schema符合xml的语法,xml语句
一个xml中,可以有多个schema.多个schema使用名称空间来区分(类似于java包名)
dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型
比如 年龄只能是整数,在schema可以直接定义一个整数类型
schema语法更加复杂,目前还不能替代dtd
2.schema的快速入门
创建一个schema文件.后缀名是.xsd
根节点<schema>
步骤:
1.看xml中有多少个元素,就写几个<element>
在schema文件里面,属性:
xmlns="http://www.w3.org/2001/XMLSchema"
--表示当前xml文件是一个约束文件
targetNamespace="http://www.example.org/1"
--直接通过这个地址来引入约束文件
elementFormDefault="qualified">
--质量良好
2.复杂元素
<element name="person">
<complexType>
<sequence>
子元素
</sequence>
</complexType>
</element>
3.简单元素。写在复杂元素的<sequence>标签下
<sequence>
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
4.在被约束文件里引入约束文件
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
--表示xml是一个被约束文件
xmlns="http://www.itcast.cn/20151111"
--是约束文档中的targetNameSpace
xsi:xsi:schemaLocation="http://http://www.itcast.cn/20151111 1.xsd">
-- targetNameSpace 空格 约束文档的路径地址
<sequence> 表示元素出现的顺序
<all> 表示元素只能出现一次
<choice> 表示元素只能出现其中的一个
maxOccurs="unbounded" 表示元素出现的次数
<any></any> 表示可以出现任意的元素
可以约束属性
写在复杂元素中,写在</complexType>之前。
<attribute name="id1" type="int" use="required"></attribute>
--use:属性是否必须出现 ="required"
引入多个schema文件,可以给每个起一个别名
<employee age="30">
<!--部门名称-->
<dept:name>100</dept:name>
*要想引用部门的约束文件里的name,要使用部门的别名 dept:元素名称
<!--员工名称-->
<name>cbz</name>
</employee>
3.sax解析的原理
*解析xml有两种技术:
dom : 根据xml层级结构,在内存中分配一个树形结构。把xml中的标签,熟悉,文本都封装成对象。
sax : 事件驱动,边读边解析
在 java.xml.parser 包里面
SAXParser
此例的实例可以从 SAXParserFactory.newSAXParser() 方法获得
- parse(File f ,DefaultHandler dh)
*两个参数
**第一个参数 : xml的路径
**事件处理器 ,
SAXParserFactory
实例 newInstance()方法得到
sax执行过程:
当解析到开始标签的时候,自动执行startElement方法
当解析到文本的时候,自动执行characters方法
当解析到结束标签的时候,自动执行endElement方法
4.使用jaxp的sax方式来解析xml
sax方式不能实现增删改操作,只能做查询操作
**打印出整个文档
执行parse方法,第一个参数是xml的路径,第二个参数是事件处理器
创建一个类,继承事件处理器的类
重写里面的三个方法
**获取到所有name元素的值
定义一个成员变量 flag = false
判断开始方法是否是name元素,如果是name元素,把flag设置为ture
如果flag是ture,在characters方法里面打印内容
当执行到结束方法的时候,把flag设置回false
**获取到第一个name元素的值
定义一个成员变量 idx = 1
在结束方法的时候,idx++
想要打印出第一个name元素的值
在characters方法里面判断,flag = ture 并且 idx = 1 的时候,再打印内容
5.使用dom4j解析xml
dom4j,是一个组织,针对解析xml,提供解析器dom4j
需要导包
--得到Document
SAXReader reader = new SAXReader();
Document document = reader.read(url);
--document的父接口是Node
如果在document里面找不到想要的方法,到Node里面找
--document里面的方法:
--getRootElement():获取根节点,返回的是Element
--Element也是一个接口,父接口是Node
--Element和Node里面的方法
getParent():获取父节点
addElement:添加标签
JavaScript笔记06
最新推荐文章于 2024-08-31 10:06:25 发布