1.xml基礎
1.1什麼是XML
1.XML是指可擴展標記語言(eXtensible Markup Language),它也是一種標記語言,很類似HTML。它被設計的宗旨是存儲數據,而非顯示數據。
2.Html展示數據
3.純文本、跨平臺、可讀性強(相對json)
4.XML標籤沒有被預定義,需要用戶自行定義標籤。
5.XML技術是W3C組織(World Wide Web Consortium萬維網聯盟)發佈的,目前遵循的是W3C組織於2000年發佈的XML1.0規範。
6.XML被廣泛認爲是繼Java之後在Internet上最激動人心的新技術
1.2 XML常見應用
1.用於存儲
2.用在軟件配置,用於描述模塊之間的關係(如著名的Struts、Spring和Hibernate都是基於XML作爲配置文件的--SSH)android都是xml。 圖形界面都是用的xml
3.在一個軟件系統中,通過XML配置文件可以提高系統的靈活性。即程序的行爲是通過XML文件來配置的,而不是硬編碼
4.XML是一種通用的數據交換格式。(跨平臺)
2 XML的語法
一個XML文件主要包括以下幾個部分:
文檔聲明
元素
屬性
註釋
實體引用及CDATA區
處理指令(PI:Processing Instruction)
Xml約束
2.1. 文檔聲明
在編寫XML文檔時,需要先使用文檔聲明來聲明XML文檔。且必須出現在文檔的第一行。(前面註釋都不允許)
最簡單的語法:<?xml version=“1.0”?>
用encoding屬性說明文檔所使用的字符編碼。保存在磁盤上的文件編碼要與聲明的編碼一致。
如:<?xml version=“1.0” encoding=“utf-8”?>
用standalone屬性說明文檔是否獨立,即是否依賴其他文檔。
如:<?xml version=“1.0” encoding=“utf-8” standalone=“yes”?>
2.2. 元素
XML元素指XML文件中出現的標籤。一個標籤分爲起始和結束標籤(不能省略)。一個標籤有如下幾種書寫形式:
包含標籤主體:<mytag>some content</mytag>
不含標籤主體:<mytag />(有時也叫空標籤)
一個標籤中可以嵌套若干子標籤,但所有標籤必須合理的嵌套,不允許有交叉嵌套。
<mytag1><mytag2></mytag1></mytag2>
一個XML文檔必須有且僅有一個根標籤,其他標籤都是這個根標籤的子標籤或孫標籤。
對於XML標籤中出現的所有空格和換行,XML解析程序都會當作標籤內容進行處理。例如:下面兩段內容的意義是不一樣的。
<網址>
ww.1000phone.copm
</網址>
<網址>ww.1000phone.copm</網址> --DOM解析
由於在XML中,空格和換行都作爲原始內容被處理,所以,在解析XML文件時要特殊處理下,繞過這些空格和換行符。
元素命名規範:一個XML元素可以包含字母、數字以及其它一些可見字符,但必須遵守下面的一些規範
區分大小寫,例如,<A>和<a>是兩個不同的標記。(與java、c變量命名一致)
不能以數字或"_" (下劃線)開頭。
不能以xml(或XML、或Xml 等)開頭。(xml 爲關鍵字,所以不能重複)
不能包含空格。
名稱中間不能包含冒號(:)。
一句話:像個正常人一樣去寫名稱就行,不用關鍵字
2.3. 屬性
一個元素可以有多個屬性,每個屬性都有它自己的名稱和取值,例如:<mytag name=“value” …/>
屬性值一定要用引號(單引號或雙引號)引起來。
屬性名稱的命名規範與元素的命名規範相同
元素中屬性沒有順序要求,但是不準重複。
在XML技術中,標籤屬性所代表的信息也可以被改成用子元素的形式來描述
2.4. 註釋
XML中的註釋語法爲:<!--這是註釋-->
注意:
XML聲明之前不能有註釋(xml聲明必須放在文檔第一行)
註釋不能嵌套,例如:
2.5. 實體引用及CDATA區
實體引用
在 XML 中,一些字符擁有特殊的意義。如果你把字符 "<" 放在 XML 元素中,會發生錯誤,這是因爲解析器會把它當作新元素的開始。如下這樣會產生 XML 錯誤:
if salary < 1000 then
爲了避免此類錯誤,需要把字符 "<" 替換爲實體引用,就像這樣:
if salary < 1000 then
在 XML 中有 5 個預定義的實體引用:
< < 小於
> > 大於
& & 和號
' ’ 省略號
" ” 引號
注意:嚴格地講,在 XML 中僅有字符 “<”和”&” 是非法的。省略號、引號和大於號是合法的,但是把它們替換爲實體引用是個好的習慣。
CDATA區
術語 CDATA 指的是不應由 XML 解析器進行解析的文本數據(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 會產生錯誤,因爲解析器會把該字符解釋爲新元素的開始。
"&" 也會產生錯誤,因爲解析器會把該字符解釋爲字符實體的開始。
某些文本,比如 JavaScript 代碼,包含大量 "<" 或 "&" 字符。爲了避免錯誤,可以將腳本代碼定義爲 CDATA。
CDATA 部分中的所有內容都會被解析器忽略。
CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:
2.6. 處理指令
處理指令,簡稱PI(Processing Instruction)。
作用:用來指揮軟件如何解析XML文檔。
語法:必須以“<?”作爲開頭,以“?>”作爲結尾。
常用處理指令:
XML聲明:<?xml version=“1.0” encoding=“GB2312”?>
xml-stylesheet指令:作用:指示XML文檔所使用的CSS樣式XSLT。
使用 CSS 格式化 XML 不是常用的方法,更不能代表 XML 文檔樣式化的未來。
2.7. XML約束
爲什麼需要約束:
XML都是用戶自定義的標籤,若出現小小的錯誤,軟件程序將不能正確地獲取文件中的內容而報錯。
什麼是XML約束:
約束文檔定義了在XML中允許出現的元素名稱、屬性及元素出現的順序等等。
在XML技術裏,可以編寫一個文檔來約束一個XML文檔的書寫規範,這稱之爲XML約束。
常用的約束技術XML DTD, XML Schema
作爲普通工程師,一般是使用別人的約束文件,而不會自己去寫約束。例如使用SSH框架開始時用到的xml文件,均要受框架的提供的xml的約束文件的約束
3.XML的解析
DOM解析
DOM(文檔對象模型):將文檔整個加載進內存,形成一顆DOM樹(document對象),將文檔的各個部分封裝成爲對象。
優點:因爲在內存中形成dom樹,可以對dom樹進行增刪改查
缺點:因爲在內存中形成dom樹,佔用內存大,不適合大文件
目標:
創建XML文件:
解析XML:
SAX解析
SAX(基於事件流的解析):省內存,但不能實現對文檔內容的修改,只能讀取。
Simple APIs for XML,XML簡單應用程序接口,在javax.xml.parsers包中,SAX解析是JDK自帶的解析方式,包括一組接口和類
5.1. SAX解析原理
以事件驅動的方式解析,即找開始結束標籤的方式
SAX的工作原理簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、等地方時通知事件處理函數,由事件處理函數做相應動作,然後繼續同樣的掃描,直至文檔結束。
所以有兩個關鍵點:順序掃描,事件處理函數