傳智播客: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() + ">");
推薦閱讀: