本文查閱方法:
一、查閱目錄 —— 查閱本文目錄,肯定想要查閱的目錄標題
二、快捷「查找」 —— 在當前瀏覽器頁面,按鍵 「Ctrl+F」 按鍵組合,開啓瀏覽器的查找功能,
在查找搜索框中 輸入須要查閱的 目錄標題,即可以直接到達 標題內容 的位置。
三、學習小結 —— 文中的學習小結內容,是筆者在學習以後總結出的,開發時可直接參考其進行應用開發的內容, 進一步加快了本文的查閱 速度。(水平有限,僅供參考。)java
本文目錄node
學習小結web
一、Dom4j 概述
二、獲取 Document對象
三、將文檔(document)寫入XML文件/更新XML文件 spring
四、獲取/操做 節點對象 瀏覽器
(1)獲取文檔的根節點.dom
(2)取得某個節點指定名稱的子節點.性能
(3)取得節點的文字學習
(4)取得某節點下全部 指定名稱 的子節點,並進行遍歷. 編碼
(5)對某節點下的全部子節點進行遍歷. .net
(6)在某節點下添加子節點.
(7)設置節點文字.
(8)刪除某節點. //childElm是待刪除的節點,parentElm是其父節點
(9)Dom4j在指定位置插入節點
(10)添加一個CDATA節點.
五、獲取/操做 節點對象屬性
(1)取得某節點下的某屬性對象
(2)取得屬性的文字
(3)刪除某屬性
(4)遍歷某節點的全部屬性
(5)設置某節點的屬性和文字.
(6)設置屬性的文字
六、字符串與XML的轉換
(1)將字符串轉化爲XML
(2)文檔或節點的XML轉化爲字符串.
七、操做xml節點 以及節點屬性的 Demo範例集合
八、XPath:超級強大的Xml文檔 節點查詢定位 技術
九、XPath 使用方法範例Demo
相關文章
XML文檔語法 學習筆記
地址:http://even2012.iteye.com/blog/1828064
DTD約束 —— Xml文檔 約束技術 學習筆記
地址:http://even2012.iteye.com/blog/1828290
Schama —— Xml文檔約束技術 學習筆記
地址:http://even2012.iteye.com/blog/1832073
Dom4j 解析Xml文檔及 XPath查詢 學習筆記
地址:http://even2012.iteye.com/blog/1832068
Jaxp :Dom解析Xml文檔和SAX解析Xml文檔學習筆記
地址:http://even2012.iteye.com/blog/1829981
學習小結
(一) 使用Dom4j 操做Xml文檔的三個步驟:
(1)獲取document對象:
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
(2)操做節點對象及其屬性
A.使用XPath方式 查詢獲取節點
a.查詢僅單個節點:document.selectSingleNode("查詢表達式");
b.查詢多個節點: document.selectNodes("查詢表達式");
B.普通方式獲取節點。
Element root = document.getRootElement();
(3)將document對象寫回到xml文檔
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8"); // 指定XML編碼
XMLWriter writer = new XMLWriter(new FileOutputStream("output.xml"),format);
writer.write(document);
writer.close();
(二)"從無到有"生成document對象
(1)解析XML形式的文本,獲得document對象.
String text = "<members></members>"; //建立根節點
Document document = DocumentHelper.parseText(text);
(2)主動建立document對象.
Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");//建立根節點
一、Dom4j 概述
Dom4j是一個簡單、靈活的開放源代碼的庫。Dom4j是由早期開發JDOM的人分離出來然後獨立開發的。與JDOM不一樣的是,dom4j使用接口和抽象基類,雖然Dom4j的API相對要複雜一些,但它提供了比JDOM更好的靈活性。
Dom4j是一個很是優秀的Java XML API,具備性能優異、功能強大和極易使用的特色。如今不少軟件採用的Dom4j,例如Hibernate,包括sun公司本身的JAXM也用了Dom4j。
使用Dom4j開發,需下載dom4j相應的jar文件。
備註:在使用Dom4j開發中,要導入一些類的包時,必定要導入Dom4j的本身的包名,不然就會出現須要轉類型的提示信息。如果強行轉換,則將沒法使用Dom4j提供的強大的功能的良好的性能。
二、獲取 Document對象
DOM4j中,得到Document對象的方式有三種:
(1)讀取XML文件,得到document對象【有源模式:源Xml文檔必須已經存在】
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
(2)解析XML形式的文本,獲得document對象. 【無源模式:無需存在源Xml文檔】
String text = "<members></members>"; //建立根節點
Document document = DocumentHelper.parseText(text);
(3)主動建立document對象.【無源模式:無需存在源Xml文檔】
Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");//建立根節點
三、將文檔(document)寫入XML文件/更新XML文件 .
(1)文檔中全爲英文,不設置編碼,直接寫入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
(2)文檔中含有中文,設置編碼格式寫入的形式.
OutputFormat format = OutputFormat.createPrettyPrint(); // Pretty [ˈpriti]
// format [ˈfɔ:mæt]
format.setEncoding("GBK"); // 指定XML編碼
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document); //注:爲避免編碼問題,此處也可以使用new FileOutputStream("").
writer.close();
四、獲取/操做 節點對象
(1)獲取文檔的根節點.
Demo樣例:Element root = document.getRootElement();
(2)取得某個節點指定名稱的子節點.
Demo樣例:Element childElement=anyNode.element(「書名");
(3)取得節點的文字
Demo樣例: String text=anyNode.getText();
(4)取得某節點下全部 指定名稱 的子節點,並進行遍歷.
Demo樣例:
List nodes = element.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element element = (Element) it.next();
//do something
}
(5)對某節點下的全部子節點進行遍歷.
for(Iterator it=element.elementIterator();it.hasNext();){
Element element = (Element) it.next();
//do something
}
(6)在某節點下添加子節點.
Element ageElement = element.addElement("age");
(7)設置節點文字.
element.setText("29");
(8)刪除某節點. //childElm是待刪除的節點,parentElm是其父節點
parentElm.remove(childElm);
(9)Dom4j在指定位置插入節點
a.獲得插入位置的節點列表(list)
b.調用list.add(index,elemnent),由index決定element的插入位置。
Element元素能夠經過DocumentHelper對象獲得。
示例代碼:
Element aaa = DocumentHelper.createElement("aaa");
aaa.setText("aaa");
List list = root.element("書").elements();
list.add(1, aaa);
(10)添加一個CDATA節點.
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
五、獲取/操做 節點對象屬性
(1)取得某節點下的某屬性對象
Element root=document.getRootElement();
Attribute attribute=root.attribute("size"); //屬性名name
(2)取得屬性的文字
String text=attribute.getText();
(3)刪除某屬性
Attribute attribute=root.attribute("size");
root.remove(attribute);
(4)遍歷某節點的全部屬性
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
(5)設置某節點的屬性和文字.
newMemberElm.addAttribute("name", "sitinspring");
(6)設置屬性的文字
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
六、字符串與XML的轉換
(1)將字符串轉化爲XML
String text = "<members> <member>sitinspring</member></members>";
Document document = DocumentHelper.parseText(text);
(2)文檔或節點的XML轉化爲字符串.
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
String docXmlText=document.asXML();
Element root=document.getRootElement();
String rootXmlText=root.asXML();
Element memberElm=root.element("member");
String memberXmlText=memberElm.asXML();
【備註:其餘的API可參見 附件資料:《dom4jAPI幫助文檔》】
七、操做xml節點 以及節點屬性的 Demo範例集合
//dom4j解析xml文檔
public class Demo1 {
//遍歷xml文檔全部標籤
public void listFile() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element root = document.getRootElement();
list(root);
}
public void list(Element e){
System.out.println(e.getName());
List<Element> list = e.elements();
for(Element child : list){
list(child);
}
}
//獲取:<書名 name="aaa">javaweb開發</書名> 節點內容
public void test1() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
String value = document.getRootElement().element("書").element("書名").getText();
System.out.println(value);
}
//獲取:<書名 name="aaa">javaweb開發</書名> 節點屬性
public void test2() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element bookname = document.getRootElement().element("書").element("書名");
System.out.println(bookname.attributeValue("name"));
}
//向xml文檔中添加一個售價節點
public void test3() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
//建立要添加的節點
Element e = DocumentHelper.createElement("售價");
e.setText("39元");
//把節點掛到書下
document.getRootElement().element("書").add(e);
//把更新的內容寫回到xml docunment(UTF-8)
/*XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream("src/book.xml"),"UTF-8"));
writer.write(document);
writer.close();*/
/*XMLWriter writer = new XMLWriter(new FileWriter("src/book.xml"));
writer.write(document);
writer.close();*/
/*OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");*/
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document); //推薦這種XML輸出流,防止亂碼的出現。
writer.close();
}
//向xml文檔中添加一個售價節點
public void test4() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
document.getRootElement().element("書").addElement("售價").setText("189元");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
//向xml文檔的指定位置添加一個售價節點
@Test
public void test5() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
//建立要添加的節點
Element e = DocumentHelper.createElement("售價");
e.setText("39元");
List list = document.getRootElement().element("書").elements();
list.add(2, e);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
//刪除節點
@Test
public void test6() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element e = (Element) document.getRootElement().element("書").elements("售價").get(1);
e.getParent().remove(e);
//更新
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
//修改節點的值:第二本書售價的值
@Test
public void test7() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element e = (Element) document.getRootElement().elements("書").get(1);
e.element("售價").setText("890元");
//更新
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
// 根據節點裏的內容刪除內容所在的節點?
@Test
public void test8() throws DocumentException, IOException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element root = document.getRootElement();
list1(root);
//更新
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);
writer.write(document);
writer.close();
}
public void list1(Element e){
String value = e.getText();
if("JavaScript網頁開發".equals(value)){
e.getParent().remove(e);
}
List<Element> list = e.elements();
for(Element child : list){
list1(child);
}
}
}
八、XPath:超級強大的Xml文檔 節點查詢定位 技術
XPath 是dom4j組織提供的很是強大的 Xml文檔 節點查詢定位 技術 ,利用它能夠很是快速的定位並獲取到所須要的節點對象。甚至能夠對查詢條件設置不少的限定約束。
基本應用語法:
(1)查詢僅單個節點:document.selectSingleNode("查詢表達式");
(2)查詢多個節點: document.selectNodes("查詢表達式");
其中的查詢表達式 使其實現快速查詢定位關鍵,XPath中各類豐富的查詢表達式語法 學習 附件資料《XPath Tutorial(菜鳥必備)》 ,資料中共列出了 近22種實例 供你們學習。
其使用方法則參加下面的範例Demo
九、XPath 使用方法範例Demo
public class Demo2 {
// 簡單查詢條件的應用
@Test
public void test1() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/book.xml"));
Element e = (Element) document.selectSingleNode("//做者");
System.out.println(e.getText());
Element e1 = (Element) document.selectNodes("//做者").get(1);
System.out.println(e1.getText());
}
// 複雜查詢條件 。實現用戶名和密碼校驗功能。重點參考,很是好
@Test
public void test2() throws Exception{
String username = "aaa1";
String password = "123";
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/users.xml"));
Node node = document.selectSingleNode("//user[@username='"+username+"' and @password='"+password+"']");
if(node!=null){
System.out.println("登錄成功!!");
}else{
System.out.println("用戶名或密碼錯誤,登錄失敗!!");
}
}
}