1. 程式人生 > 實用技巧 >java基礎 - XML操作

java基礎 - XML操作

原文連結

Java進階之"XML操作"https://zhuanlan.zhihu.com/p/30829960

詳細程式碼參考(必看)

XML解析——Java中XML的四種解析方式

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 &lt; 1000 </message>  //這是正確的.

在 XML 中,有 5 個預定義的實體引用:

&lt; < 小於
&gt; > 大於
&amp; & 和號
&apos; ' 單引號
&quot; " 引號

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 讀取與寫出,闡述完畢.