schema

1.schema 约束

1.dtd 语法:
<!ELEMENT 元素名称 约束>

2.schema符合 xml 的语法,xml 语句
3.一个 xml 中可以有多个 schema,多个 schema 使用名称空间区分(类似于 java 包名)
4.dtd 里面有 PCDATA 类型,但是在 schema 里面可以支持更多的数据类型
——比如 年龄只能是整数,在 schema 可以定义一个整数类型

schema快速入门

1.创建一个 schema 文件 后缀名是 .xsd
根节点<schema>
2.在 schema 文件里面
属性: xmlns=“http://www.w3.org/2001/XMLSchema
——表示当前 xml 文件是一个约束文件
targetNamespace=“http://www.itcast.cn/20151111
——使用 Schema 约束文件,直接通过这个地址引入约束文件
elementFormDefault=“qualified”

schema开发过程.jpg

1.看 xml 中有多少个元素
<element>
2.看简单元素和复杂元素
3.简单元素,写在复杂元素的<sequence>里面

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

4.在被约束文件里面引入约束文件

<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/20151111 "
xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">

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 空格 约束文档的地址路径
  • <sequence >:表示元素出现的顺序
  • <all> :元素只能出现一次
  • <choice>:元素只能出现其中的一个
    maxOccurs=“unbounded”:表示元素出现的次数
  • <any></any> :表示任意元素
    可以约束属性
    写在复杂元素里面
    写在 </complexType>之前
<attribute name="id1" type="int" use="required" ></attribute>
  • 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():
    获取根节点,返回的是 Element
  • Element 也是一个接口,父接口是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<Element> 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<Element> 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");//修改<age>值</age>

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<Node> list=document. selectNodes(“//name”);
//遍历 list 集合
for(Node node:list){  //node 是每一个name 元素
String s=node.getText();
Saystem.out.print(s);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,720评论 1 7
  • 1、XML的语法 文档声明写法: <?xml version="1.0" ?>文档声明必须出现在xml文件...
    来个芒果阅读 1,193评论 0 1
  • Schema简介 XML Schema也被称为XML Schema定义(XML Schema Definition...
    tobe_superman阅读 5,260评论 0 8
  • xml xml就是一个标记语言,主要用途就是数据传输和配置文件。 eg: xml总是以<?xml version=...
    大批阅读 318评论 0 1
  • schema约束 1.dtd语法:<!ELEMENT元素名称 约束>schema符合xml的语法,xml语句一个...
    拥心lyy阅读 1,182评论 0 0