1.schema 约束
1.dtd 语法:
2.schema符合 xml 的语法,xml 语句
3.一个 xml 中可以有多个 schema,多个 schema 使用名称空间区分(类似于 java 包名)
4.dtd 里面有 PCDATA 类型,但是在 schema 里面可以支持更多的数据类型
——比如 年龄只能是整数,在 schema 可以定义一个整数类型
2.schema 的快速入门
1.创建一个 schema 文件 后缀名是 .xsd
根节点
2.在 schema 文件里面
属性: xmlns=“http://www.w3.org/2001/XMLSchema”
——表示当前 xml 文件是一个约束文件
targetNamespace=“http://www.itcast.cn/20151111”
——使用 Schema 约束文件,直接通过这个地址引入约束文件
elementFormDefault=“qualified”
步骤:
(1)看 xml 中有多少个元素
(2) 看简单元素和复杂元素
如果复杂元素
子元素
(3)简单元素,写在复杂元素的
(4)在被约束文件里面引入约束文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
——表示 xml 是一个被约束文件
xmlns="http://www.itcast.cn/20151111 "
——是约束文档里面 targetNamespace
xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
—— targetNamespace 空格 约束文档的地址路径
:表示元素出现的顺序 :元素只能出现一次 :元素只能出现其中的一个
maxOccurs=“unbounded”:表示元素出现的次数:表示任意元素
可以约束属性
写在复杂元素里面
写在 之前
- name:属性名称
- type :属性类型
- use:属性是否必须要出现 required 表示必须要出现
3.使用 dom4j 解析 xml
- dom4j ,是一个组织,针对 xml 解析,提供解析器 dom4j
- dom4 j 不是 javase 的一部分,想要使用第一步需要怎么做?
1.创建一个文件夹 lib
2.复制 jar 包 到lib下面,
3.右键点击 jar包,build path -- add to buildpath
4.看到 jar 包,变成奶瓶样子,表示导入成功
- 得到 document
SAXReader reader=new SAXReader();
Document document=reader.read(url);
document 的父接口是 Node
——如果在document 里面找不到想要的方法,到 Node 里面去找document 里面的方法getRootElement():
获取根节点,返回的是 ElementElement 也是一个接口,父接口是Node
Element 和 Node 里面方法
-- getparent():获取父节点
-- addElement:添加标签
1.element(qname)
表示获取标签下面的第
一个子标签
qname:标签的名称
2.elements(qname)
获取标签下面是这个名称的所有子标签(一层)
qname:标签名称
3.elements():获取标签下面的所有的一层子标签
4.使用 dom4j 查询 xml
查询所有name 元素里面的值
步骤:
1.创建解析器
2.得到document
3.得到根节点
4.得到 p1
5.得到 p1下面的 name
6.得到 name 里面的值
//创建解析器
SAXReader saxReader=new SAXReader();
//得到 document
Document document=saxReader.read(“src/p1.xml”);
//得到根节点
Element root=document.getRootElement();
//得到 p1
List list=root.elements(“p1”);
//遍历 list
for(Element element:list){
//element 是每一个 p1 元素
//得到 p1下面的 name
Element name1=element.element("name");
//得到 name 里面的值
String s=name1.getText();
System.out.println(s);
}
5.使用 dom4j实现在末尾添加
步骤:
1.创建解析器
2.得到 document
3.得到根节点
4.获取到第一个 p1
5.在 p1下面添加元素
6.在添加完成之后的元素下面添加文本
7.回写 xml
代码:
//创建解析器
SAXReader saxReader=new SAXReader();
//得到 document
Document document=saxReader.read(“src/p1.xml”);
//得到根节点
Element root=document.getRootElement();
//得到第一个p1 元素
Element p1 =root.element(“p1”);
//在 p1下面直接添加元素
Element sex1=p1.addElement(“sex”);
//在 sex 下面添加文本
sex1.setText(“nv”);
//回写
OutputFormat format=OutputFormat.createPrettyPrint();
XMLWrite xmlwrite=new XMLWrite(new FileOutputStream(“src/p1.xml”),format);
xmlwrite.write(document);
xmlwriter.close();
6.使用 dom4j实现在特定位置添加节点
步骤:
1.创建解析器
2.得到 document
3.得到根节点
4.获取到第一个 p1
Element p1 =root.element(“p1”)
5.获取到 p1下面的所有元素
List list=p1.elements();
6.创建元素
Element school =DocumentHelper.createElement("school");
7.创建文本
school.setText("ecit");
8.在特定位置添加
list.add(1,school);
9.回写 xml
7.使用 dom4j 实现修改操作
步骤:
1.得到第一个根节点
Element root=document.getRootElement();
2.得到第一个p1
Element p1 =root.element(“p1”);
3.得到 p1下面的age
Element age =p1.element(“age”);
4.修改 age 的值
age.setText("300");//修改值
8.使用 domj 实现删除节点的操作
步骤:
1.得到第一个根节点
Element root=document.getRootElement();
2.得到第一个p1
Element p1 =root.element(“p1”)
3.得到 p1下面的 school
Element sch=p1.element(“school”);
p1.remove(sch); //删除 sch 节点
9.使用 domj 获取属性的操作
步骤:
1.得到 document
2.得到根节点
3.得到第一个 p1元素
4.得到 p1 里面的属性值
String value=p1.attributeValue("id1");
10.使用 dom4j 支持XPath 的操作
可以直接获取到某个元素
- 第一种形式
/AAA/DDD/BBB:表示一层一层的,AAA 下面的 DDD 下面的 BBB
- 第二种形式
/BBB:表示和这个名称相同,表示只要名称是 BBB ,都能得到
- 第三种形式
/*: 表示所有元素
- 第四种形式
BBB[1]:表示第一个 BBB 元素
BBB[last()] : 表示最后一个BBB 元素
- 第五种形式
BBB[@id]:表示只要BBB 上面有 id 属性,都得到
- 第六周形式
//BBB[@id="b1"]:表示元素名称是 BBB,在BBB 上面有 id 属性,并且 id 的属性值是 b1
11.用 dom4j 支持XPath 的具体操作
1.默认情况下,dom4j 不支持 XPath
2.如果想要在 dom4j 里面有 Xpath
第一步需要,引入支持 xpath 的jar 包,使用 jaxen-1.1-beta-6.jar
需要把 jar 包导入到项目中
3.在 dom4j 里面提供了两个方法,用来支持 xpath
selecNodes("xpath 表达式)
——获取多个节点
selectSingleNode("xpath 表达式")
——获取一个节点
4.使用 xpath 实现:查询xml 中所有name 的值
使用 selectNodes(“//name”);
步骤:
1.得到 domcument
2.使用 selectNodes(“//name”)方法得到所有的 name 值
List list=document. selectNodes(“//name”);
//遍历 list 集合
for(Node node:list){ //node 是每一个name 元素
String s=node.getText();
Saystem.out.print(s);
}