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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xml解析: dom4j

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xml解析: dom4j 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、XML解析

1.概述

2.解析方式和解析器

二、Dom4j的基本使用

1.解析原理

2.基本使用

2.常用方法

(1)SaxReader對象

(2)Document對象

(3)Element對象

三、dom4j練習

1.使用dom4j查詢xml

2.使用dom4j實現添加操作

3.使用dom4j實現在特定位置添加元素?

4.使用dom4j實現修改節點的操作

5.使用dom4j實現刪除節點的操作

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

7.使用dom4j支持xpath的操作

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

一、XML解析

1.概述

當將數據存儲在XML后,我們就希望通過程序獲取XML的內容。人們為不同問題提供不同的解析方式,使用不同的解析器進行解析,方便開發人員操作XML。

2.解析方式和解析器

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

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

a)優點:元素與元素之間保留結構關系,故可以進行增刪改查操作。

b)缺點:XML文檔過大,可能出現內存溢出

(2)SAX:是一種速度更快,更有效的方法。她逐行掃描文檔,一邊掃描一邊解析。并以事件驅動的方式進行具體解析,每執行一行,都觸發對應的事件。(了解)

a)優點:處理速度快,可以處理大文件

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

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

?

解析器,就是根據不同的解析方式提供具體實現。

(1)常見的解析開發包

JAXP:sun公司提供支持DOM和SAX開發包

Dom4j:比較簡單的的解析開發包(常用)

JDom:與Dom4j類似

Jsoup:功能強大DOM方式的XML解析開發包,尤其對HTML解析更加方便(項目中講解)

二、Dom4j的基本使用

1.解析原理

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

2.基本使用

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

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

2.常用方法

(1)SaxReader對象

(2)Document對象

(3)Element對象

三、dom4j練習

1.使用dom4j查詢xml

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

2.使用dom4j實現添加操作

* 在第一個student標簽末尾添加一個元素 <sex>男</sex>

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

3.使用dom4j實現在特定位置添加元素?

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

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

4.使用dom4j實現修改節點的操作

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

public static void main(String[] args) throws Exception {String path = "person.xml";Document doc = createMySAXReader(path);// 得到根節點Element root = doc.getRootElement();//得到第一個student節點Element e1 = root.element("student");//修改該節點的age值e1.element("age").setText("26");ReWrite(path, doc);}public static Document createMySAXReader(String path) throws Exception {// 創建解析器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實現刪除節點的操作

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

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

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

* 獲取第一個student里面的屬性id1的值

String path = "person.xml";Document doc = createMySAXReader(path);// 得到根節點Element root = doc.getRootElement();// 得到第一個student節點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:表示和這個名稱相同,只要名稱是BBB,都得到

(3)/*:所有元素

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

(5)BBB[last()]:表示最后一個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里面提供了兩個方法,用來支持xpath

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

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

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實現:獲取第一個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());

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。