日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xml解析: dom4j

發(fā)布時(shí)間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xml解析: dom4j 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、XML解析

1.概述

2.解析方式和解析器

二、Dom4j的基本使用

1.解析原理

2.基本使用

2.常用方法

(1)SaxReader對(duì)象

(2)Document對(duì)象

(3)Element對(duì)象

三、dom4j練習(xí)

1.使用dom4j查詢xml

2.使用dom4j實(shí)現(xiàn)添加操作

3.使用dom4j實(shí)現(xiàn)在特定位置添加元素?

4.使用dom4j實(shí)現(xiàn)修改節(jié)點(diǎn)的操作

5.使用dom4j實(shí)現(xiàn)刪除節(jié)點(diǎn)的操作

6.使用dom4j獲取屬性的操作

7.使用dom4j支持xpath的操作

8.使用dom4j支持xpath具體操作

一、XML解析

1.概述

當(dāng)將數(shù)據(jù)存儲(chǔ)在XML后,我們就希望通過程序獲取XML的內(nèi)容。人們?yōu)椴煌瑔栴}提供不同的解析方式,使用不同的解析器進(jìn)行解析,方便開發(fā)人員操作XML。

2.解析方式和解析器

開發(fā)中比較常見的解析方式有三種,如下:

(1)DOM:要求解析器把整個(gè)XML文檔裝載到內(nèi)存,并解析成一個(gè)Document對(duì)象

a)優(yōu)點(diǎn):元素與元素之間保留結(jié)構(gòu)關(guān)系,故可以進(jìn)行增刪改查操作。

b)缺點(diǎn):XML文檔過大,可能出現(xiàn)內(nèi)存溢出

(2)SAX:是一種速度更快,更有效的方法。她逐行掃描文檔,一邊掃描一邊解析。并以事件驅(qū)動(dòng)的方式進(jìn)行具體解析,每執(zhí)行一行,都觸發(fā)對(duì)應(yīng)的事件。(了解)

a)優(yōu)點(diǎn):處理速度快,可以處理大文件

b)缺點(diǎn):只能讀,逐行后將釋放資源,解析操作繁瑣。

(3)PULL:Android內(nèi)置的XML解析方式,類似SAX。(了解)

?

解析器,就是根據(jù)不同的解析方式提供具體實(shí)現(xiàn)。

(1)常見的解析開發(fā)包

JAXP:sun公司提供支持DOM和SAX開發(fā)包

Dom4j:比較簡(jiǎn)單的的解析開發(fā)包(常用)

JDom:與Dom4j類似

Jsoup:功能強(qiáng)大DOM方式的XML解析開發(fā)包,尤其對(duì)HTML解析更加方便(項(xiàng)目中講解)

二、Dom4j的基本使用

1.解析原理

XML DOM 和 HTML DOM一樣,XML DOM 將整個(gè)XML文檔加載到內(nèi)存,生成一個(gè)DOM樹,并獲得一個(gè)Document對(duì)象,通過Document對(duì)象就可以對(duì)DOM進(jìn)行操作。

2.基本使用

需要引入? ?jar/dom4j-1.6.1.jar

dom4j 必須使用核心類SaxReader加載xml文檔獲得Document,通過Document對(duì)象獲得文檔的根元素,然后就可以操作了。

2.常用方法

(1)SaxReader對(duì)象

(2)Document對(duì)象

(3)Element對(duì)象

三、dom4j練習(xí)

1.使用dom4j查詢xml

//1、創(chuàng)建解析器SAXReader reader = new SAXReader();//2、得到documentDocument doc = reader.read("src/Person.xml");//3、得到根節(jié)點(diǎn)Element root = doc.getRootElement();//4、得到所有的student標(biāo)簽List<Element> list = root.elements("student");//5.遍歷for (Element element : list) {Element name = element.element("name");System.out.println(name.getText());}

2.使用dom4j實(shí)現(xiàn)添加操作

* 在第一個(gè)student標(biāo)簽?zāi)┪蔡砑右粋€(gè)元素 <sex>男</sex>

//創(chuàng)建解析器SAXReader sr = new SAXReader();//得到documentDocument doc = sr.read("/person.xml");//得到根節(jié)點(diǎn)Element root = doc.getRootElement();//得到第一個(gè)student節(jié)點(diǎn)Element e1 = root.element("student");//添加sex標(biāo)簽Element sex = e1.addElement("sex");//給標(biāo)簽添加內(nèi)容sex.setText("男");//回寫xml,使用XMLWriter類OutputFormat opf = OutputFormat.createPrettyPrint();XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("/person.xml"), opf);xmlWriter.write(doc);//關(guān)閉流xmlWriter.close();

3.使用dom4j實(shí)現(xiàn)在特定位置添加元素?

* 在所有student下面的age標(biāo)簽之前添加 <hobby>籃球</hobby>

// 創(chuàng)建解析器SAXReader sr = new SAXReader();// 得到documentDocument doc = sr.read("/person.xml");// 得到根節(jié)點(diǎn)Element root = doc.getRootElement();// 得到所有student標(biāo)簽List<Element> list = root.elements("student");// 遍歷student標(biāo)簽for (Element element : list) {// 得到student標(biāo)簽的每一個(gè)子標(biāo)簽List<Element> list2 = element.elements();// 使用DocumentHelper類來創(chuàng)建標(biāo)簽Element hobby = DocumentHelper.createElement("hobby");hobby.setText("籃球");// 加到age所在的角標(biāo)位置list2.add(1, hobby);}// 回寫xmlXMLWriter xmlWriter = new XMLWriter(new FileOutputStream("/person.xml"), new OutputFormat().createPrettyPrint());xmlWriter.write(doc);// 關(guān)閉流xmlWriter.close();

4.使用dom4j實(shí)現(xiàn)修改節(jié)點(diǎn)的操作

* 修改第一個(gè)student下面的age元素的值 <age>28</age>

public static void main(String[] args) throws Exception {String path = "person.xml";Document doc = createMySAXReader(path);// 得到根節(jié)點(diǎn)Element root = doc.getRootElement();//得到第一個(gè)student節(jié)點(diǎn)Element e1 = root.element("student");//修改該節(jié)點(diǎn)的age值e1.element("age").setText("26");ReWrite(path, doc);}public static Document createMySAXReader(String path) throws Exception {// 創(chuàng)建解析器SAXReader sr = new SAXReader();// 得到documentDocument doc = sr.read(path);return doc;}// 回寫xml方法public static void ReWrite(String path, Document doc) throws Exception {XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path),new OutputFormat().createPrettyPrint());xmlWriter.write(doc);xmlWriter.close();}

5.使用dom4j實(shí)現(xiàn)刪除節(jié)點(diǎn)的操作

* 刪除第一個(gè)student下面的<hobby>籃球</hobby>元素

String path = "person.xml";Document doc = createMySAXReader(path);// 得到根節(jié)點(diǎn)Element root = doc.getRootElement();// 得到第一個(gè)student節(jié)點(diǎn)Element e1 = root.element("student");Element e2 = e1.element("hobby");// 通過父節(jié)點(diǎn)刪除hobby節(jié)點(diǎn)e1.remove(e2);ReWrite(path, doc);

6.使用dom4j獲取屬性的操作

* 獲取第一個(gè)student里面的屬性id1的值

String path = "person.xml";Document doc = createMySAXReader(path);// 得到根節(jié)點(diǎn)Element root = doc.getRootElement();// 得到第一個(gè)student節(jié)點(diǎn)Element e1 = root.element("student");// 通過attributeValue()方法得到id1屬性的值String value=e1.element("name").attributeValue("id");System.out.println(value);

7.使用dom4j支持xpath的操作

(1)/AAA/DDD/BBB:表示一層一層的,AAA下面的DDD下面的BBB元素

(2)//BBB:表示和這個(gè)名稱相同,只要名稱是BBB,都得到

(3)/*:所有元素

(4)BBB[1]:表示第一個(gè)BBB元素

(5)BBB[last()]:表示最后一個(gè)BBB元素

(6)//BBB[@id]:表示只要BBB元素上面有id屬性,都得到

(7)//BBB[@id='b1']:表示元素名稱是BBB,在BBB上面有id屬性,并且id的屬性值是b1

8.使用dom4j支持xpath具體操作

dom4j中要使用xpath,需要引入支持xpath的jar包

?jaxen-1.1-beta-6.jar

在dom4j里面提供了兩個(gè)方法,用來支持xpath

(1)List selectNodes("表達(dá)式"):獲取符合表達(dá)式的元素集合

(2)Element selectSingleNode("表達(dá)式"):獲取符合表達(dá)式的唯一元素

String path = "src/Person.xml"; Document doc = createMySAXReader(path); // 使用selectNodes("//name")方法得到所有的name元素 List<Node> list = doc.selectNodes("//name"); // 遍歷list集合 for (Node node : list) {// 得到name元素里面的值System.out.println(node.getText()); }

使用xpath實(shí)現(xiàn):獲取第一個(gè)student下面的name的值

所有name元素的xpath表示:/person/student[1]/name

selectSingleNode("?/person/student[1]/name");

String path = "src/Person.xml"; Document doc = createMySAXReader(path); // 使用selectSingleNode方法得到指定的name元素 Node node = doc.selectSingleNode("/person/student[1]/name"); System.out.println(node.getText());

?

總結(jié)

以上是生活随笔為你收集整理的xml解析: dom4j的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91xxxxx| 久久久久毛片 | 夜夜夜操 | 日本黄色短片 | 欧美网| 国产日韩一区二区 | 热久久伊人 | 日韩人妻精品一区二区三区视频 | 日本成人免费在线 | 国产av一区不卡 | 国产一级大片 | 久久久久久免费精品 | 久久久久久久国产精品美女 | 亚洲精品视频免费在线观看 | 黄色免费视频观看 | 加勒比久久综合 | 亚洲自拍偷拍一区二区三区 | 射死你天天日 | 九九小视频 | 狠狠人妻久久久久久综合麻豆 | 日本xxxxxxxxx69 | 亚洲 高清 成人 动漫 | 波多野结衣一区二区三区高清av | 少妇29p| 国产成人精品一区二区在线观看 | 狠狠干香蕉| 黄色激情网址 | 久久无吗视频 | 国产精品成人免费一区久久羞羞 | 日韩欧美一二三区 | 精品久久久在线观看 | 好吊色在线观看 | 性毛片| 亚洲国产精品久久精品怡红院 | 国产精品成 | 午夜av一区二区三区 | 日韩色在线观看 | 11一12免费毛片 | 亚洲成av人片在线观看 | 噜噜色av| 成年人在线播放 | 久操视频在线播放 | 双性懵懂美人被强制调教 | 国产精品久久久毛片 | 日韩三级视频在线播放 | 91se在线 | 免费黄色网址在线观看 | 成年人黄色 | 国产美女久久久久 | 国产成人免费网站 | 日日夜夜91 | 91精品视频国产 | 亚洲乱码一区二区三区在线观看 | 麻豆91茄子在线观看 | 一区二区亚洲 | 亚洲在线观看一区二区 | 色妇av | 黄色一级一片免费播放 | 亚洲大逼 | 美国三级视频 | 91视频首页 | 91av在线免费视频 | 成人午夜视频免费在线观看 | 38激情| 成人在线免费电影 | 自拍偷拍999 | 久久久久久91香蕉国产 | 影音先锋男人站 | 日韩欧美一区二区三区免费观看 | 亚洲精品播放 | 久久久高清视频 | 视频在线观看一区二区 | 国产精品无码av在线有声小说 | 亚洲最大成人在线视频 | www.日本色 | 久久综合亚洲 | 成人毛片在线精品国产 | 欧美一级免费在线 | 国产精品天天干 | 蕾丝视频污 | 精品xxxx | 久久4| 一边吃奶一边摸做爽视频 | 性高湖久久久久久久久免费 | 日本中文字幕不卡 | 日韩免费| 青青草免费公开视频 | av啊啊 | av无线看 | 97在线免费视频 | 91一区在线观看 | 日韩国产在线观看 | 26uuu欧美日本 | 亚洲成人一区二区三区 | 自拍偷拍国产视频 | 日韩黄色免费 | 黄a在线观看| 天堂在线视频tv | 欧美成人高清视频 |