JavaWeb (day6)

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é)點,返回的是 Element

  • Element 也是一個接口奠支,父接口是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);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末妻熊,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子洛心,更是在濱河造成了極大的恐慌固耘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件词身,死亡現場離奇詭異厅目,居然都是意外死亡,警方通過查閱死者的電腦和手機法严,發(fā)現死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門损敷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人深啤,你說我怎么就攤上這事拗馒。” “怎么了溯街?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵诱桂,是天一觀的道長。 經常有香客問我呈昔,道長挥等,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任堤尾,我火速辦了婚禮肝劲,結果婚禮上,老公的妹妹穿的比我還像新娘郭宝。我一直安慰自己辞槐,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布粘室。 她就那樣靜靜地躺著榄檬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衔统。 梳的紋絲不亂的頭發(fā)上丙号,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音缰冤,去河邊找鬼犬缨。 笑死,一個胖子當著我的面吹牛棉浸,可吹牛的內容都是我干的怀薛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迷郑,長吁一口氣:“原來是場噩夢啊……” “哼枝恋!你這毒婦竟也來了创倔?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤焚碌,失蹤者是張志新(化名)和其女友劉穎畦攘,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體十电,經...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡知押,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了鹃骂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片台盯。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畏线,靈堂內的尸體忽然破棺而出静盅,到底是詐尸還是另有隱情,我是刑警寧澤寝殴,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布蒿叠,位于F島的核電站,受9級特大地震影響蚣常,放射性物質發(fā)生泄漏市咽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一史隆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧曼验,春花似錦泌射、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豺裆,卻和暖如春拒秘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背臭猜。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工躺酒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔑歌。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓羹应,卻偏偏與公主長得像,于是被迫代替她去往敵國和親次屠。 傳聞我的和親對象是個殘疾皇子园匹,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容

  • day5 一雳刺、表單提交方式 1.使用submit提交 2.使用button提交表單 3.使用超鏈接提交 4.onc...
    mwj610閱讀 410評論 0 0
  • 1. XML總結 1.1. XML簡介 XML : 可擴展的標記語言。(和HTML非常類似的) 可擴展的裸违。 自定義...
    Ethan_Walker閱讀 3,030評論 0 12
  • 什么是XML掖桦? XML:extensiable markup language 被稱作可擴展標記語言 XML簡單的...
    Java3y閱讀 2,415評論 5 41
  • 課程內容:XML 安裝MyEclipse開發(fā)工具 * 破解(看圖) * 配置 * 配置工作空間的編碼(UTF-...
    流年劃破容顏_cc55閱讀 1,189評論 0 2
  • 作者:益都雨點 2018年6月24日上午枪汪。 成都仲夏的天空飄著小雨,給人們帶來了些許涼爽紊馏。 四...
    益都雨點0256閱讀 289評論 0 1