dom4j解析xml基本方法以及當xml中存在名稱空間時的三種處理辦法
使用SAXReader需要匯入dom4j-full.jar包。
dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的。dom4j是一個非常非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體,可以在SourceForge上找到它。
使用舉例:
1. s.xml內容
[xhtml] view plaincopyprint?- <?xmlversion="1.0"encoding="GB2312"?>
- <data>
- <rowqueryDTO.enterpriseId
- </data>
2.解析
[c-sharp] view plaincopyprint?import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.AbstractAttribute;
publicclass ReadXMLTest {
public
File xmlFile = new File("C:/s.xml");
FileInputStream fis = null;
try {
fis = new FileInputStream(xmlFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.err.println("File is not exsit!");
}
SAXReader saxReader = new SAXReader();
List rowList = null;
try {
//生成文件對應實體
Document doc = saxReader.read(fis);
//獲取指定路徑下的元素列表,這裡指獲取所有的data下的row元素
rowList = doc.selectNodes("//data/row");
} catch (DocumentException e) {
e.printStackTrace();
}
for(Iterator iter = rowList.iterator();iter.hasNext();){
//獲得具體的row元素
Element element = (Element)iter.next();
//獲得row元素的所有屬性列表
List elementList = element.attributes();
for(Iterator iter1 = elementList.iterator();iter1.hasNext();){
//將每個屬性轉化為一個抽象屬性,然後獲取其名字和值
AbstractAttribute aa = (AbstractAttribute)iter1.next();
System.out.println("Name:"+aa.getName()+";Value:"+aa.getValue());
}
//輸出:
//Name:queryDTO.enterpriseId;Value:gfd
//Name:queryDTO.loginName;Value:gdfg
//Name:queryDTO.state;Value:0
System.out.println(element.getName());
//輸出:
//row
// 取得row元素的queryDTO.enterpriseId屬性的值
System.out.println(element.attributeValue("queryDTO.enterpriseId"));
//輸出:
//gfd
//如果element下有子元素,(類似width="**"),要想獲得該子元素的值,可以用如下方法
System.out.println(element.elementText("width"));//因為沒有,所以輸出為null。
}
}
}
當你解析XML時,是否會因為名稱空間的存在而不能得償所願呢?
.net上的解決方法我就不多說了(.net有世界上最詳細的開發文件。這是我最欣賞微軟的地方)
java方面,好多人推薦用dom4j處理xml,我也就說說在dom4j上處理帶名稱空間的xml
先說前兩個方法,是從網上看來的。(來自http://blog.csdn.net/anyoneking/)摘抄如下:
xml程式碼example:
第一個方案.設定你的xpath的名稱空間setNamespaceURIs
publicstaticvoid main(String[] args) throws Exception{
Map map =new HashMap();
map.put("design","http://www.eclipse.org/birt/2005/design");
SAXReader saxReader =new SAXReader();
File file =new File("D:\test.xml");
Document document = saxReader.read(file);
XPath x = document.createXPath("//design:list-property");
x.setNamespaceURIs(map);
List nodelist = x.selectNodes(document);
System.out.println(nodelist.size());
}
}
第二個解決方案:設定你的DocumentFactory()的名稱空間 setXPathNamespaceURIs
publicclass TransferXML {publicstaticvoid main(String[] args) throws Exception{
Map map =new HashMap();
map.put("design","http://www.eclipse.org/birt/2005/design");
SAXReader saxReader =new SAXReader();
File file =new File("D:\test.xml");
saxReader.getDocumentFactory().setXPathNamespaceURIs(map);
Document document = saxReader.read(file);
List tmp = document.selectNodes("//design:list-property");
System.out.println(tmp.size());
}
}
第三種方法:本人用的,最笨也是最通用的方法,就是不使用開發環境給你提供的一系列物件,而是用XPath語法中自帶的local-name() 和 namespace-uri() 指定你要使用的節點名和名稱空間。
當你遇到使用xslt來樣式化xml時,就知道這個笨方法的好處了:
publicstaticvoid main(String[] args) throws Exception
SAXReader saxReader =new SAXReader();
File file =new File("D:\test.xml");
Document document = saxReader.read(file);
List tmp = document.selectNodes("//*[local-name()='report' and namespace-uri()='http://www.eclipse.org/birt/2005/design']/* [local-name()='list-property']");
System.out.println(tmp.size());
}
}
相關推薦
當 xml中存在名稱空間,三種處理辦法(dom4j)
{ Map map = new HashMap(); map.put( " design " , " http://www.eclipse.org/birt/2005/design " ); SAXReader saxReader = new SAX
dom4j解析xml基本方法以及當xml中存在名稱空間時的三種處理辦法
使用SAXReader需要匯入dom4j-full.jar包。 dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的。dom4j是一個非常非常優秀的Java XML API,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體,可以在SourceFo
解決JSON Lib, XML轉JSON字串不要namespace,以及當xml中有Type屬性時轉換成json會丟失問題
XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read(xml); return json.toString(3); 以上程式碼在xmll轉成json字串後,
[MyBatis] Mapper.xml中的名稱空間及命名解析
Mapper.xml相關使用 名稱空間(Namespaces) 名稱空間(Namespaces) 在之前版本的MyBatis中是可選的,這樣容易引起混淆因此毫無益處。現在名稱空間則是必須的,且易於簡單地用更長的完完全限定名來隔離語句。 名稱空間使得你所見到的介面繫結成為可能,
String與XML互轉以及從XML取節點值並修改
讀取xml檔案生成Document物件 Document轉換成String型別串 String串轉成xml 已知xml節點取節點值 已知xml節點修改節點值 一個xml檔案: <?xml version="1.0" encoding="UTF-8"
【科技】原根的快速判斷方法以及對1求離散對數的另一種想法
鑑於實際需要,本文中所選的模數$p$總是一個平凡質數,並用$\phi$表示$\phi (p) = p - 1$。 原根的定義: 基於$p$是質數,我們可以很簡單的把它的定義想成,如果一個數$a \in [0, p - 1]$是原根的充要條件是對於$x \in [0, p - 2]$,$a^{x}$互不相同
Flask --(24)資料庫的基本知識以及在 Flask 中的使用概述
資料庫的簡單回顧 SQL(Structured Query Language):結構化查詢語言。 表形式儲存 列數固定 ,行數可變 定義資料,主鍵、外來鍵,引用同表或不同表的主鍵,這種聯絡稱為關係。 NoSQL:非結構化查詢語言。 不遵循關係型資料庫的統稱
java中建立執行緒的三種方法以及區別
Java使用Thread類代表執行緒,所有的執行緒物件都必須是Thread類或其子類的例項。Java可以用三種方式來建立執行緒,如下所示: 1)繼承Thread類建立執行緒 2)實現Runnable介面建立執行緒 3)使用Callable和Future建立執行緒 下面
當listview中有點選事件時的實現方法
1、首先在adapter中定義介面 private static OnAddClickListener onItemAddClick;//向activity傳值 //向activity傳值 pu
spring的xml中p名稱空間與C名稱空間簡化屬性賦值
p名稱空間與C名稱空間簡化屬性賦值 Spring給我們提供的一種比較簡便的方式來為我們的屬性賦值 P名稱空間用於簡化set方法的屬性賦值 C名稱空間用於簡化構造器的屬性賦值 第一步:加上我們的P名稱空間與C名稱空間 <?xml version="1.0" encodi
數據庫優化查詢的方法以及大訪問量到數據庫時的優化
改變 條目 事務 安全保障 寫性能 垂直 where 內存 統計 一.數據庫優化查詢的方法 1.使用索引: 應盡量避免全表掃描,首先考慮在where 以及 order by ,group by 涉及的列上建立索引 2.優化SQL語句: 1>通過explai
Java中從鍵盤輸入的三種方法
readline 鍵盤 輸入 exception nbsp stack clas system reader import java.io.BufferedReader; import java.io.IOException; import java.io.Input
Electron與jQuery中$符號沖突的三種解決方法
jquer obj define export tro conf jquery blog ack 在Electron工程中引用jQuery時,經常會出現以下錯誤: Uncaught ReferenceError: $ is not defined 解決的具體方
頁面中插入CSS樣式的三種方法
text 總結 聲明 特殊 優勢 color 應該 -c -- 頁面中插入css樣式的三種方法總結 1、 外部樣式 當樣式需要應用於很多頁面時,外部樣式表將是理想的選擇。在使用外部樣式表的情況下,你可以通過改變一個文件來改變整個站點的外觀。每個頁面使用<link>
對象的notify方法的含義和對象鎖釋放的三種情況
代碼塊 程序 退出 ont nbsp pos 狀態 線程等待 content 1,notify的含義 (1)notify一次只隨機通知一個線程進行喚醒 (2)在執行了notify方法之後,當前線程不會馬上釋放該對象鎖,呈wait狀態的線程也不能馬上獲得該對象鎖,
PHP中遍歷數組有三種常用的方法
log jin 存儲 方法 執行 ron () ech ++ 在PHP中操作最多的數據估計也就是數組了,有著效率高、速度快、存儲方便的特點。 PHP中遍歷數組有三種常用的方法:1、for循環,用法最為靈活,靈活到懷疑人生,但記住格式也非常簡單。2、foreach,是PHP為
[轉]PHP開發中涉及到emoji表情的三種處理方法
是個 lte .com ins tro 曲線 urn 往裏面 就是 最近幾個月做微信開發比較多,存儲微信昵稱必不可少,可這萬惡的微信支持emoji表情做昵稱,這就有點蛋疼了 一般Mysql表設計時,都是用UTF8字符集的。把帶有emoji的昵稱字段往裏面insert一下就沒
Eclipse中安裝插件的三種方法
ons plugs soft new 文件夾 分隔 假設 clip oca Eclipse插件的安裝方法大體可以分為三種:直接復制、使用link文件,以及使用eclipse自帶的圖形界面的插件安裝方法。 一、使用link文件(建議使用) eclipse的安裝目錄:E:\
在VS中新增lib庫的三種方法
在VS中新增lib庫的三種方法 注意: 1、每種方法也要複製相應的DLL檔案到相應目錄,或者設定DLL目錄的位置,具體方法為:"Properties" -> "Configuration Properties" -> "Deb
深度解析 Go 語言中「切片」的三種特殊狀態
我們今天要來講一個非常細節的小知識,這個知識被大多數 Go 語言的開發者無視了,它就是切片的三種特殊狀態 —— 「零切片」、「空切片」和「nil 切片」。 切片被視為 Go 語言中最為重要的基礎資料結構,使用起來非常簡單,有趣的內部結構讓它成了 Go 語言面試中最為常見的考點。切片的底層是