dom4j操作XML

(一)創建Document的基本操作

/**
* XML基本操作
*/
public void BaseOperation(){
//創建一個document
Document document=DocumentHelper.createDocument();
//創建根結點
Element root=document.addElement("root");
//為根結點添加一個book節點
Element book1=root.addElement("book");
//為book1添加屬性type
book1.addAttribute("type","science");
//為book1添加name子節點
Element name1=book1.addElement("Name");
//并設置其name為"Java"
name1.setText("Java");
//為book1創建一個price節點,并設其價格為100
book1.addElement("price").setText("100");//為根結點添加第二個book節點,并設置該book節點的type屬性
Element book2=root.addElement("book").addAttribute("type","science");
//為book1添加name子節點
Element name2=book2.addElement("Name");
//并設置其name為"Oracle"
name2.setText("Oracle");
//為book1創建一個price節點,并設其價格為200
book2.addElement("price").setText("200");//輸出xml
System.out.println(document.asXML());
}

調用BaseOperation,輸出結果為:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<book type="science">
<Name>Java</Name>
<price>100</price>
</book>
<book type="science">
<Name>Oracle</Name>
<price>200</price>
</book>
</root>

(二)根據一個符合Document格式的字符串來生成一個Document

/**將字符串轉化為Document
* @param str 輸入的字符串
* @return 生成的document
* @throws DocumentException
*/
public Document parserStrtoDocument(String str) throws DocumentException{Document document=DocumentHelper.parseText(str);return document;
}

調用示例:

String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
Document document = parserStrtoDocument(str);
System.out.println(document.asXML());

輸出結果為:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<book type="science">
<Name>Java</Name>
<price>100</price>
</book>
</root>

(三)取得xml節點屬性的基本方法

/**
* 取得xml的節點和屬性的值
* @throws DocumentException
*/
public void getBaseInfofromDocument() throws DocumentException{
String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
//生成一個Document
Document document = DocumentHelper.parseText(str);
//取得根結點
Element root=document.getRootElement();
//取得book節點
Element book=root.element("book");
//取得book節點的type屬性的值
String type=book.attributeValue("type");
//取得Name節點
Element name=book.element("Name");
//取得書名
String bookname=name.getText();
//取得書的價錢
int price=Integer.parseInt(book.element("price").getText());//輸出書目信息
System.out.println("書名:" bookname);
System.out.println("所屬類別:" type);
System.out.println("價格:" price);
}

調用getBaseInfofromDocument,輸出結果為:

書名:Java
所屬類別:science
價格:100

(四)利用迭代,xpath取得節點及其屬性值

/**利用迭代,xpath取得xml的節點及其屬性值
* @throws DocumentException
*/
public void getComplexInfofromDocument() throws DocumentException{String str="<root><book type='science'><Name>Java</Name><price>100</price></book>"
"<book type='science'><Name>Oracle</Name><price>120</price></book>""<book type='society'><Name>Society security</Name><price>130</price></book>"
"<author><name>chb</name></author></root>";
//生成一個Document
Document document = DocumentHelper.parseText(str);//提取類型為"society"的書
//此處需要添加支持xpath的jar包,詳細見備注
Element society_book=(Element)document.selectSingleNode("/root/book[@type='society']");
System.out.println(society_book.asXML());//提取價格節點的列表
System.out.println("-----------價格列表-------------");
List price=document.selectNodes("//price");
for(int i=0;i<price.size();i ){
Element elem_price=(Element)price.get(i);
System.out.println(elem_price.getText());
}//循環根結點下的所有節點,若當前節點為book,則輸出這本書的詳細信息
System.out.println("-------------書目詳情------------");
System.out.println("書名\t\t類別\t\t價格");
Element root=document.getRootElement();
Iterator iterator=root.elementIterator();
while(iterator.hasNext()){
Element element=(Element)iterator.next();
if(element.getName().equals("book")){
System.out.print(element.element("Name").getText() "\t");
System.out.print(element.attributeValue("type") "\t\t");
System.out.print(element.element("price").getText() "\n");
}
}//查找作者姓名
Element author=(Element)document.selectSingleNode("//author");
System.out.println("---------" author.element("name").getText() "----------");
//提取作者的所有書目名稱
Iterator iterator_book=root.elementIterator("book");
while(iterator_book.hasNext()){
Element book=(Element)iterator_book.next();
System.out.print(book.element("Name").getText() "\t");
}//屬性迭代
System.out.println("\n-------屬性迭代--------");
String str1="<book type='science' name='Java' price='100'/>";
Document document1=DocumentHelper.parseText(str1);
//開始迭代
Iterator iterator_attribute=document1.getRootElement().attributeIterator();
while(iterator_attribute.hasNext()){
//提取當前屬性
Attribute attribute=(Attribute)iterator_attribute.next();
System.out.println(attribute.getName() ":" attribute.getValue());
}
}

調用getComplexInfofromDocument,輸出結果為:

<book type="society"><Name>Society security</Name><price>130</price></book>
-----------價格列表-------------
100
120
130
-------------書目詳情------------
書名 類別 價格
Java science 100
Oracle science 120
Society security society 130
---------chb----------
Java Oracle Society security
-------屬性迭代--------
type:science
name:Java
price:100

備注:調用該方法之前,應該先向工程中添加支持xpath的jar包,否則,會出現以下錯誤:

java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
at xml_chb.dom4j_chb.getComplexInfofromDocument(dom4j_chb.java:82)
at xml_chb.dom4j_chb.main(dom4j_chb.java:92)
Exception in thread "main"

轉載于:https://www.cnblogs.com/xuanzai/archive/2012/09/12/2681269.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260423.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle數據庫中閃回恢復的詳細分析

Oracle9i開始提供閃回查詢&#xff0c;以便能在需要的時候查到過去某個時刻的一致性數據&#xff0c;這是通過Undo實現的。這個功能有很大的限制&#xff0c;就是相關事務的undo不能被覆蓋&#xff0c;否則就無力回天了。oracle10g大大的增強了閃回查詢的功能&#xff0c;并且提…

python 查看當前目錄_「Python」打包分發工具setuptools學習

?setuptools是python標準的打包分發工具&#xff0c;它可以將我們編寫的python項目打包安裝&#xff0c;這樣其他同事就可以像調用標準庫或python第三方庫那樣直接使用&#xff1b;也可以將項目上傳到Pypi供更多人的下載安裝使用。?1. 項目結構項目結構?這是一個打包構建好的…

如何殺掉D狀態的進程?[zt]【轉】

轉自&#xff1a;http://blog.csdn.net/chinalinuxzend/article/details/4288791 [-] 如何殺掉D狀態的進程zt相關博文原貼:http://www.xclinux.cn/?p752 如何殺掉D狀態的進程&#xff1f;[zt] 狀態為 D (Uninterruptible sleep) &#xff0c;以及狀態為 Z (Zombie)這些垃圾進程…

九月十月百度人搜,阿里巴巴,騰訊華為筆試面試八十題(第331-410題)

九月十月百度人搜&#xff0c;阿里巴巴&#xff0c;騰訊華為小米搜狗筆試面試八十題 &#xff08;參與算法&面試題交流與討論&#xff0c;請加群&#xff1a;30382647&#xff09;引言 自發表上一篇文章至今&#xff08;事實上&#xff0c;上篇文章更新了近3個月之久&#…

mysql性能結構優化原理_MySQL性能管理及架構設計(二):數據庫結構優化、高可用架構設計、數據庫索引優化...

一、數據庫結構優化(非常重要)1.1 數據庫結構優化目的1、減少數據冗余&#xff1a;(數據冗余是指在數據庫中存在相同的數據&#xff0c;或者某些數據可以由其他數據計算得到)&#xff0c;注意&#xff0c;盡量減少不代表完全避免數據冗余&#xff1b;2、盡量避免數據維護中出現…

python git是什么_python爬蟲之git的使用

一、簡單認識&#xff1a; 1、初始化文件夾為版本控制文件夾&#xff0c;首先建立一個文件夾&#xff0c;進入這個文件夾以后輸入git init初始化這個文件夾。2、Git幾種位置概念 1、本地代碼&#xff1a;本地更改完代碼以后&#xff0c;雖然是存放在git的文件夾里面&#xff0c…

產品經理網站數據分析之測量問題現狀(二)

本章續接上文&#xff0c;主要講解流程圖的繪制要領&#xff0c;以及示例。 1、基礎流程圖 基礎流程圖應該簡明扼要地描述出流程的主要結構&#xff0c;在弄清楚流程的起點、終點&#xff0c;以及主要步驟后&#xff0c;按照流程的先后順序&#xff0c;按照要展示的流程長短比例…

鍵盤流的逆襲- Idea 中使用 VIM mode 提高生成效率

Idea 中使用 VIM mode 提高生成效率 安裝配置 Idea 的 vim 插件 先挖坑&#xff0c;后續再填。這個毫無技術含量&#xff0c;不寫了&#xff0c;自己去搜吧。 快捷鍵代替鼠標 打開文件 按兩下 shift 鍵 > 輸入類目文件名按 command e &#xff0c;打開最近編輯的文件列表&a…

git 撤銷掛起的更改_Timer計時任務因系統時間的修改導致掛起解決方案

之前開發的一款運行在定制Android設備上的一個實時監控程序發生了一個很奇怪的問題&#xff1a;關機狀態下放置了半個月左右的時間之后&#xff0c;再次開機使用&#xff0c;使用到一半的時候&#xff0c;顯示界面就卡死在某一個狀態下了(顯示界面只顯示一行文字&#xff0c;代…

yii urlmanager配置post不生效_一文帶你徹底學會 Git Hooks 配置

你好&#xff0c;我是小桔&#xff0c;是一個沒有感情的代碼崽。今天給大家介紹一下 Git Hooks&#xff0c;相信 Git 大家都在用吧&#xff0c;Git 除了用作版本控制&#xff0c;還有許多高級功能&#xff0c;Git Hooks 就是其中之一。本文環境&#xff1a;Git 版本&#xff1a…

Tiff – 值得你體驗一下的可視化的字體對比工具

Tiff 是一款字體對比工具&#xff0c;可視化對比兩種字體之間的差異。這是一個工具來幫助比較兩種字體&#xff0c;同時學習排版。在這一點上&#xff0c;谷歌 Web 字體作為 Tiff 外部字體文件的唯一來源。由于應用程序使用的一些功能需要 HTML5 和 CSS3 支持&#xff0c;因此請…

[.NET] 建構子中傳遞子對象的對象

在設計對象繼承的時候&#xff0c;父對象建構子會需要一些參數&#xff0c;這些參數可以由子對象建構子透過base關鍵詞來提供。 namespace Test001 {public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollecti…

php基礎教程(三):變量

1、php變量規則 變量以 $ 符號開頭&#xff0c;其后是變量的名稱變量名稱必須以字母或下劃線開頭變量名稱不能以數字開頭變量名稱只能包含字母數字字符和下劃線&#xff08;A-z、0-9 以及 _&#xff09;變量名稱對大小寫敏感&#xff08;$y 與 $Y 是兩個不同的變量&#xff09;…

操作系統實驗文件管理_系統設計硬核知識(5)——操作系統的文件管理

操作系統對計算機的管理包括兩個方面&#xff1a;硬件資源和軟件資源。硬件資源的管理包括CPU 的管理、存儲器的管理、設備管理等&#xff0c;主要解決硬件資源的有效和合理利用問題。軟件資源包括各種系統程序、各種應用程序、各種用戶程序&#xff0c;也包括大量的文檔材料、…

錯誤 0xc0202049: 數據流任務 1: 無法在只讀列“ID”中插入數據

數據庫導入導出時總失敗&#xff0c;錯誤信息如下&#xff1a; 正在驗證 (錯誤) 消息錯誤 0xc0202049: 數據流任務 1: 無法在只讀列“ID”中插入數據。 (SQL Server 導入和導出向導) 錯誤 0xc0202045: 數據流任務 1: 驗證列元數據失敗。 (SQL Server 導入和導出向導) 錯誤 0xc0…

python中的items方法_Python 字典的items()方法和iteritems()方法有什么不同?【面試題詳解】...

今天愛分享給大家帶來Python 字典的items()方法和iteritems()方法有什么不同?【面試題詳解】&#xff0c;希望能夠幫助到大家。 字典是 Python 語言中唯一的映射類型。映射類型對象里哈希鍵(鍵&#xff0c;key)和指向的對象&#xff08;值&#xff0c;value)是多對一的關系&am…

大網高級技術筆記(一)

防偽碼&#xff1b;黑發不知勤學早&#xff0c;白首方悔讀書遲本章目標&#xff1a;理解消化動態路由協議與OSPF協議并應用于實際工作中。第一章 動態路由協議一、按照路由執行的算法分類距離矢量路由協議&#xff1a;RIP、IGRP鏈路狀態路由協議&#xff1a;OSPE、IS-IS二、RIP…

容器類基礎篇(一)

容器類&#xff1a;用來解決數組具有固定尺寸而使得靈活性受限的問題。基本的容器類&#xff08;集合類&#xff09;有&#xff1a;List、Set、Queue、Map。 Java容器類類庫的用途是用來“保存對象”&#xff0c;這分為兩個不同的大類&#xff1a; 1.Collection&#xff08;集合…

阿里MySQL讀寫一致_阿里面試題:如何保證緩存與數據庫的雙寫一致性?

作者&#xff1a;你是我的海嘯出處&#xff1a;https://blog.csdn.net/chang384915878/article/details/86756463只要用緩存&#xff0c;就可能會涉及到緩存與數據庫雙存儲雙寫&#xff0c;你只要是雙寫&#xff0c;就一定會有數據一致性的問題&#xff0c;那么你如何解決一致性…

反射小應用之DataTable和ListT互操作

反射小應用之DataTable和List<T>互操作 在程序中&#xff0c;往往會遇到一些小情況&#xff0c;就是數據庫取出來的時候為了方便直接將數據通過存儲在DataSet或DataTable中&#xff0c;這樣做的一個后果是在日后的的對數據進行”細“操作時&#xff0c;就發現它可能沒有L…