XML解析

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的解析

  1. DOM解析

    DOM(文檔對象模型):將文檔整個加載進內存,形成一顆DOM樹(document對象),將文檔的各個部分封裝成爲對象。
    優點:因爲在內存中形成dom樹,可以對dom樹進行增刪改查
    缺點:因爲在內存中形成dom樹,佔用內存大,不適合大文件
    目標:
    創建XML文件:
    這裏寫圖片描述

這裏寫圖片描述
解析XML:
這裏寫圖片描述

  1. SAX解析

    SAX(基於事件流的解析):省內存,但不能實現對文檔內容的修改,只能讀取。
    Simple APIs for XML,XML簡單應用程序接口,在javax.xml.parsers包中,SAX解析是JDK自帶的解析方式,包括一組接口和類

5.1. SAX解析原理

以事件驅動的方式解析,即找開始結束標籤的方式
SAX的工作原理簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、等地方時通知事件處理函數,由事件處理函數做相應動作,然後繼續同樣的掃描,直至文檔結束。
所以有兩個關鍵點:順序掃描,事件處理函數

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章