原文鏈接
Java進階之"XML操作" https://zhuanlan.zhihu.com/p/30829960
詳細代碼參考(必看)
1.XML全稱是"(擴展標記語言)"
是一種用來結構化文檔和數據的通用且適應性強的格式,它不僅僅可以用於 WEB,而且可以被用於任何地方。說的明白一點就是:XML 被設計用來傳輸和存儲數據的。
在java中,很多配置文件,都是xml文件,比如說spring,或者mybatis.
XML的學習和使用都很簡單,我們先看它的語法.
1.1 所有 XML 元素都須有關閉標簽
<p>有始有終</p>
1.2 XML 標簽對大小寫敏感
<Message>前后是不一樣的,這就錯了.</message>
1.3 XML 必須正確地嵌套
<b><i>同學,請注意插入順序.</b></i>
1.4 XML 文檔必須有根元素
XML 文檔必須有一個元素是所有其他元素的父元素。該元素稱為根元素。
<root>
<one>
<two>.....</two>
</one>
</root>
1.5 XML 的屬性值須加引號
<datasource id="db_oracle">這一行有引號,正確.</datasource>
<datasource id=db_oracle>這一行沒有引號,錯誤的.</datasource>
1.6 特殊字符的使用方式(又叫實體引用)
<message> 10 < 1000 </message> //這是錯誤的.
<message> 10 < 1000 </message> //這是正確的.
在 XML 中,有 5 個預定義的實體引用:
< < 小於
> > 大於
& & 和號
' ' 單引號
" " 引號
1.7 XML 中的注釋
<!-- 這是注釋 --> //與html的語法一樣
1.8 CDATA段
格式:< ! [ CDATA [ 文本內容 ] ] >
特殊標簽中的實體引用都被忽略,所有內容被當成一整塊文本數據對待.適用於有多個特殊字符的情況.
語法看完了,我們看看用法.
2.xml的解析
xml的解析方式有多種,在Java中,我們只說兩種最常用的方式.
2.1 DOM解析方式
DOM:(Document Object Model, 即文檔對象模型) 是 W3C 組織推薦的處理 XML 的一種方式。DOM解析器在解析XML文檔時,會把文檔中的所有元素,按照其出現的層次關系,解析成一個個Node對象(節點)。其優缺點分別為:
優點:把xml文件在內存中構造樹形結構,可以遍歷和修改節點
缺點: 如果文件比較大,內存有壓力,解析的時間會比較長
2.2 SAX解析方式
SAX(simple API for XML)是一種XML解析的替代方法。相比於DOM,SAX是一種速度更快,更有效的方法。它逐行掃描文檔,一邊掃描一邊解析。而且相比於DOM,SAX可以在解析文檔的任意時刻停止解析。 其優缺點分別為:
優點: 解析可以立即開始,速度快,沒有內存壓力
缺點: 不能對節點做修改
2.3 讀取XML
Java中常用的操作xml的一個包是dom4j的包.
dom4j是一個非常優秀的Java XML API,具有性能優異、功能強大和極端易用的特點,同時它也是一個開放源代碼的軟件。使用dom4j來實現對XML文檔的解析,詳細過程如下:
2.3.1 使用dom4j需要導入dom4j對應的jar包。
2.3.2 創建SAXReader類的對象來實現讀取XML文檔,代碼如下:
SAXReader reader = new SAXReader();
2.3.3 使用SAXReader類的read方法獲取Document對象,Document 對象是一棵文檔樹的根,可為我們提供對文檔數據的最初(或最頂層)的訪問入口,代碼如下:
Document doc = reader.read(new File("EmpList.xml"));
2.3.4 使用Document對象的getRootElement方法獲取要解析的XML文檔的根元素,該方法返回值類型為Element。Element 對象表示 XML文檔中的元素。元素可包含屬性、其它元素或文本。如果元素含有文本,則在文本節點中表示該文本,代碼如下:
Element root = doc.getRootElement();
2.3.5 使用Element對象提供的方法繼續解析XML文檔,例如:其elements方法用來獲取當前元素下的所有子元素,代碼如下:
List<Element> elements = root.elements();
2.3.6 最后遍歷list集合即可.
2.4 寫一個XML文件.
2.4.1 使用DocumentHelper類的靜態方法createDocument創建文檔對象Document,代碼如下所示:
Document doc = DocumentHelper.createDocument();
2.4.2 使用Document類的addElement方法,創建根節點<list>,代碼如下所示:
// 添加根標記
Element root = doc.addElement("list");
2.4.3 添加子元素
// 向根元素中添加名為user的子元素
Element ele = root.addElement("user");
然后為one這個元素賦值
ele.addAttribute("id", 1);
ele.addElement("name").addText("小明");
2.4.4 :生成文件
// 寫出
XMLWriter writer = new XMLWriter();
FileOutputStream fos = new FileOutputStream("emps.xml");
writer.setOutputStream(fos);
writer.write(doc);
writer.close();
至此.xml 讀取與寫出,闡述完畢.