傳智播客:xml入門以及解析xml文件 - habernate的日誌 - 網易博客

傳智播客:xml入門以及解析xml文件

java 2009-05-17 10:52:23 閱讀15 評論0 字型大小:大中小訂閱

D:文檔 – html 文檔 或 xml 文檔

O:對象 – document 對象的屬性和方法

M:模型

DOM 是針對XML的基於樹的API。

DOM樹:節點(node)的層次。

DOM 把一個文檔表示為一棵家譜樹(父,子,兄弟)

DOM定義了Node的介面以及許多種節點類型來表示XML節點的

多個方面.

l 文檔聲明:

在一個完整的XML文檔中必須包含一個XML文檔聲明,該聲明必須位於文檔的第一行。這個聲明表示該文檔是一個XML文檔,以及遵循的是哪個XML版本的規範。最簡單的XML文檔聲明語法如下:

<?xml version="1.0" ?>

可通過在XML文檔聲明中指定encoding屬性來說明該XML文檔所使用的字元編碼方式:

<?xml version="1.0" encoding="GB2312" ?>

encoding屬性默認的設置是Unicode編碼,如果文檔中的字元是以UTF-8或者是UTF-16作為編碼,則可以不設置這個屬性。

l 元素和屬性

XML 文檔的主體由元素組成。一個XML元素由一個標記來定義,包括開始和結束標記以及其中的內容

沒有嵌套在其他元素內的元素叫做根元素

若元素中沒有嵌套子元素和數據,這樣的元素叫做空元素

所有的標記都必須有結束標記或者使用空元素的結束說明

XML 中不允許使用標籤交叉來破壞文檔的結構化層次關係

XML標記名稱區分大小寫

XML標記名稱中不能包括空格

可以為 XML 標籤設置屬性,XML中的屬性也可以隨便定義。一個標籤可以有多個屬性,每個屬性都有名稱和取值

XML 中屬性值一定要用雙引號或單引號引起來

l 注釋

在 XML 文檔中可以加入注釋來為 XML 文檔添加附加信息,注釋會被程序忽略。語法如下:

<!-- 注釋信息 -->

因為 XML 必須作為XML文檔的第一行,所以不要把注釋放在 XML 聲明之前

XML 中的注釋不能嵌套使用

l 在XML中,空格和換行將作為原始內容被處理

l CDATA 區:

CDATA 區指的是不想被解析程序解析的一片原始數據區,以」<![CDATA[」 開始,以」]]>」結束。

l 特殊字元: 在 XML 中有些特殊字元需要轉義字元序列表示其原始字面意義:

比如我們希望在xml中寫入如下內容:

l SELECT * FROM a WHERE a.salary<100.這裡的「<」會被xml解析器當作關鍵字進行解析,這個時候可以把這個<」用<![CDATA[<]]>處理,告訴編譯器,不對這裡面的內容進行解析

下面代碼是獲得一個xml文檔中元素結構

//1. 得到 xml 文檔對應的 Document 對象

//1.1 創建 SAXReader 對象

SAXReader saxReader = new SAXReader();

//1.2 調用 SAXReader 對象的 read() 方法讀取 xml, 得到 Document 對象

File file = new File("E:\java\090515\dom4j\customers.xml");

Document document = saxReader.read(file);

//2. 得到 xml 文檔的根元素

Element root = document.getRootElement();

System.out.println("<" + root.getName() + ">");

//3. 得到根節點的所有子節點

List<Element> elements = root.elements();

//4. 對 3 得到的 List 進行遍歷

for(Element ele : elements){

System.out.print(" <" + ele.getName() + " ");

//得到 customer 節點第一個屬性對象

Attribute attr = ele.attribute(0);

System.out.print(attr.getName() + "="" + attr.getValue() + """);

System.out.println(">");

//5. 得到每個 customer 節點的所有子節點

List<Element> eles = ele.elements();

for(Element e : eles){

System.out.print(" <" + e.getName() + ">");

//6. 得到 customer 每個子節點的值

String value = e.getText();

System.out.print(value);

System.out.println("</" + e.getName() + ">");

}

System.out.println(" </" + ele.getName() + ">");

}

System.out.println("</" + root.getName() + ">");

推薦閱讀:

攝影技巧入門
入門級
墳地風水入門知識 墓地風水知識大全
Linux Shell編程入門
投資入門第七步:開戶交易

TAG:網易 | 博客 | 傳智播客 | 解析 | 文件 | 網易博客 | 日誌 | 播客 | 入門 |