1.schema 約束
1.dtd 語法:
<!ELEMENT 元素名稱 約束>
2.schema符合 xml 的語法镀裤,xml 語句
3.一個 xml 中可以有多個 schema秆乳,多個 schema 使用名稱空間區(qū)分(類似于 java 包名)
4.dtd 里面有 PCDATA 類型梳玫,但是在 schema 里面可以支持更多的數據類型
——比如 年齡只能是整數单料,在 schema 可以定義一個整數類型
2.schema 的快速入門
1.創(chuàng)建一個 schema 文件 后綴名是 .xsd
根節(jié)點<schema>
2.在 schema 文件里面
屬性: xmlns=“http://www.w3.org/2001/XMLSchema”
——表示當前 xml 文件是一個約束文件
targetNamespace=“http://www.itcast.cn/20151111”
——使用 Schema 約束文件艇拍,直接通過這個地址引入約束文件
elementFormDefault=“qualified”
步驟:
(1)看 xml 中有多少個元素
<element>
(2) 看簡單元素和復雜元素
如果復雜元素
<complexType>
<sequence>
子元素
</sequence>
</complexType>
(3)簡單元素眠蚂,寫在復雜元素的
<complexType>
<sequence>
<element name="name" type="String"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
(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.創(chuàng)建一個文件夾 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():
獲取根節(jié)點,返回的是 ElementElement 也是一個接口奠支,父接口是Node
Element 和 Node 里面方法
-- getparent():獲取父節(jié)點
-- addElement:添加標簽
1.element(qname)
表示獲取標簽下面的第
一個子標簽
qname:標簽的名稱
2.elements(qname)
獲取標簽下面是這個名稱的所有子標簽(一層)
qname:標簽名稱
3.elements():獲取標簽下面的所有的一層子標簽
4.使用 dom4j 查詢 xml
查詢所有name 元素里面的值
步驟:
1.創(chuàng)建解析器
2.得到document
3.得到根節(jié)點
4.得到 p1
5.得到 p1下面的 name
6.得到 name 里面的值
//創(chuàng)建解析器
SAXReader saxReader=new SAXReader();
//得到 document
Document document=saxReader.read(“src/p1.xml”)馋辈;
//得到根節(jié)點
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.創(chuàng)建解析器
2.得到 document
3.得到根節(jié)點
4.獲取到第一個 p1
5.在 p1下面添加元素
6.在添加完成之后的元素下面添加文本
7.回寫 xml
代碼:
//創(chuàng)建解析器
SAXReader saxReader=new SAXReader();
//得到 document
Document document=saxReader.read(“src/p1.xml”)迈螟;
//得到根節(jié)點
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實現在特定位置添加節(jié)點
步驟:
1.創(chuàng)建解析器
2.得到 document
3.得到根節(jié)點
4.獲取到第一個 p1
Element p1 =root.element(“p1”)
5.獲取到 p1下面的所有元素
List<Element> list=p1.elements();
6.創(chuàng)建元素
Element school =DocumentHelper.createElement("school");
7.創(chuàng)建文本
school.setText("ecit");
8.在特定位置添加
list.add(1,school);
9.回寫 xml
7.使用 dom4j 實現修改操作
步驟:
1.得到第一個根節(jié)點
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 實現刪除節(jié)點的操作
步驟:
1.得到第一個根節(jié)點
Element root=document.getRootElement();
2.得到第一個p1
Element p1 =root.element(“p1”)
3.得到 p1下面的 school
Element sch=p1.element(“school”);
p1.remove(sch); //刪除 sch 節(jié)點
9.使用 domj 獲取屬性的操作
步驟:
1.得到 document
2.得到根節(jié)點
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 表達式)
——獲取多個節(jié)點
selectSingleNode("xpath 表達式")
——獲取一個節(jié)點
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);
}