一、XML是什么?
萬維網協會推出的一套數據交換標準——XML,是一種可擴展的標記語言,被設計用來傳輸和存儲數據。XML 可用于定義 Web 網頁上的文檔元素以及復雜數據的表述和傳輸。
Extensible Markup Language,簡稱 XML,中文含義是可擴展標記語言,該語言與 html 類似,主要功能是傳輸數據、儲存數據和共享數據。XML 語言沒有規定的標簽體,需要自定義標簽,是一種自我描述的語言。XML 與 HTML 有著本質的區別,XML 傳輸和存儲數據,而 HTML 用來顯示數據。
XML 的最大特點是自我描述和任意擴展,當用其描述數據時,用戶可以根據需要,組織符合 XML 規范形式的任意內容,并且標簽的名稱也可以由用戶指定。
圖片來源網絡
二、XML的結構
例如,一個描述書籍的XML文檔可能如下:
<?xml version="1.0" encoding="UTF-8" ?> <!-- 文檔聲明,默認編碼為UTF-8 --><!DOCTYPE note SYSTEM "book.dtd"><book id="1"> <name>JAVA核心技術</name> <author>Cay S. Horstmann</author> <isbn lang="CN">1234567</isbn> <tags> <tag>Java</tag> <tag>Network</tag> </tags> <pubDate/></book>
XML有固定的結構,首行必定是<?xml version="1.0"?>,可以加上可選的編碼。緊接著,如果以類似<!DOCTYPE note SYSTEM "book.dtd">聲明的是文檔定義類型(DTD:Document Type Definition),DTD是可選的。接下來是XML的文檔內容,一個XML文檔有且僅有一個根元素,根元素可以包含任意個子元素,元素可以包含屬性,例如,<isbn lang="CN">1234567</isbn>包含一個屬性lang="CN",且元素必須正確嵌套。如果是空元素,可以用<tag/>表示。
XML有幾個特點:一是純文本,默認使用UTF-8編碼,二是可嵌套,適合表示結構化數據。如果把XML內容存為文件,那么它就是一個XML文件,例如book.xml。此外,XML內容經常通過網絡作為消息傳輸。
三、一些重要語法規則和知識
所有 XML 元素都須有關閉標簽
在 HTML,經常會看到沒有關閉標簽的元素:
<p>This is a paragraph<p>This is another paragraph
在 XML 中,省略關閉標簽是非法的。所有元素都必須有關閉標簽:
<p>This is a paragraph</p><p>This is another paragraph</p>
注釋:您也許已經注意到 XML 聲明沒有關閉標簽。這不是錯誤。聲明不屬于XML本身的組成部分。它不是 XML 元素,也不需要關閉標簽。
XML 標簽對大小寫敏感
XML 元素使用 XML 標簽進行定義。
XML 標簽對大小寫敏感。在 XML 中,標簽 <Letter> 與標簽 <letter> 是不同的。
必須使用相同的大小寫來編寫打開標簽和關閉標簽:
<Message>這是錯誤的。</message><message>這是正確的。</message>
注釋:打開標簽和關閉標簽通常被稱為開始標簽和結束標簽。不論您喜歡哪種術語,它們的概念都是相同的。
XML 必須正確地嵌套
在 HTML 中,常會看到沒有正確嵌套的元素:
<b><i>This text is bold and italic</b></i>
在 XML 中,所有元素都必須彼此正確地嵌套:
<b><i>This text is bold and italic</i></b>
在上例中,正確嵌套的意思是:由于 <i> 元素是在 <b> 元素內打開的,那么它必須在 <b> 元素內關閉。
XML 文檔必須有根元素
所有的 XML 文檔有且只有一個根元素來定義整個文檔。
XML 文檔必須有一個元素是所有其他元素的父元素。該元素稱為根元素。
<root> <child> <subchild>.....</subchild> </child></root>
XML 的屬性值須加引號
與 HTML 類似,XML 也可擁有屬性(名稱/值的對)。
在 XML 中,XML 的屬性值須加引號。請研究下面的兩個 XML 文檔。第一個是錯誤的,第二個是正確的:
<note date=08/08/2008><to>George</to><from>John</from></note> <note date="08/08/2008"><to>George</to><from>John</from></note>
在第一個文檔中的錯誤是,note 元素中的 date 屬性沒有加引號。
實體引用
在 XML 中,一些字符擁有特殊的意義。
如果你把字符 "<" 放在 XML 元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始。
這樣會產生 XML 錯誤:
<message>if salary < 1000 then</message>
為了避免這個錯誤,請用實體引用來代替 "<" 字符:
<message>if salary < 1000 then</message>
在 XML 中,有 5 個預定義的實體引用:
<<小于>>大于&&和號''單引號""引號
注釋:在 XML 中,只有字符 "<" 和 "&" 確實是非法的。大于號是合法的,但是用實體引用來代替它是一個好習慣。
XML 中的注釋
在 XML 中編寫注釋的語法與 HTML 的語法很相似:
<!-- This is a comment -->
在 XML 中,空格會被保留
HTML 會把多個連續的空格字符裁減(合并)為一個.在 XML 中,文檔中的空格不會被刪節。
XML 以 LF 存儲換行
在 windows 應用程序中,換行通常以一對字符來存儲:回車符 (CR) 和換行符 (LF)。這對字符與打字機設置新行的動作有相似之處。在 Unix 應用程序中,新行以 LF 字符存儲。而 macintosh 應用程序使用 CR 來存儲新行。
什么是 XML 元素?
XML 元素指的是從(且包括)開始標簽直到(且包括)結束標簽的部分。
元素可包含其他元素、文本或者兩者的混合物。元素也可以擁有屬性。
<bookstore><book category="CHILDREN"> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book><book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book></bookstore>
在上例中,<bookstore> 和<book>都擁有元素內容,因為它們包含了其他元素。<author>只有文本內容,因為它僅包含文本。
在上例中,只有 <book> 元素擁有屬性 (category="CHILDREN")。
XML 命名規則
XML 元素必須遵循以下命名規則:
- 名稱可以含字母、數字以及其他的字符
- 名稱不能以數字或者標點符號開始
- 名稱不能以字符 “xml”(或者 XML、Xml)開始
- 名稱不能包含空格
可使用任何名稱,沒有保留的字詞。
最佳命名習慣
使名稱具有描述性。使用下劃線的名稱也很不錯。
名稱應當比較簡短,比如:<book_title>,而不是:<the_title_of_the_book>。
避免 "-" 字符。如果您按照這樣的方式進行命名:"first-name",一些軟件會認為你需要提取第一個單詞。
避免 "." 字符。如果您按照這樣的方式進行命名:"first.name",一些軟件會認為 "name" 是對象 "first" 的屬性。
避免 ":" 字符。冒號會被轉換為命名空間來使用(稍后介紹)。
XML 文檔經常有一個對應的數據庫,其中的字段會對應 XML 文檔中的元素。有一個實用的經驗,即使用數據庫的名稱規則來命名 XML 文檔中的元素。
非英語的字母比如 éòá 也是合法的 XML 元素名,不過需要留意當軟件開發商不支持這些字符時可能出現的問題。
XML 屬性
從 HTML,你會回憶起這個:<img src="computer.gif">。"src" 屬性提供有關<img> 元素的額外信息。
在 HTML 中(以及在 XML 中),屬性提供有關元素的額外信息:
<img src="computer.gif"><a href="demo.asp">
屬性通常提供不屬于數據組成部分的信息。在下面的例子中,文件類型與數據無關,但是對需要處理這個元素的軟件來說卻很重要:
<file type="gif">computer.gif</file>
XML 屬性必須加引號
屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person 標簽可以這樣寫:
<person sex="female">
或者這樣也可以:
<person sex='female'>
注釋:如果屬性值本身包含雙引號,那么有必要使用單引號包圍它,就像這個例子:
<gangster name='George "Shotgun" Ziegler'>
或者可以使用實體引用:
<gangster name="George "Shotgun" Ziegler">
四、XML拓展和高級用法
- JDK 中的 XML API
- DOM 解析 XML
- SAX解析XML
- DOM4j解析XML
- XML CDATA
- ……
可參閱:
- w3school:https://www.w3school.com.cn/xml/index.asp
- C語言中文網:http://c.biancheng.net/view/1632.html
- 廖雪峰Java教程:https://www.liaoxuefeng.com/wiki/1252599548343744/1255945389334784
本文由以上文章整理