什麼是XML?
XML:extensiable markup language 被稱作可擴充标記語言
XML簡單的曆史介紹:
- gml->sgml->html->xml
- gml(通用标記語言)–在不同的機器進行通信的資料規範
- sgml(标準通用标記語言)
- html(超文本标記語言)
為什麼我們需要使用XML呢?
- ①我們沒有XML這種語言之前,我們使用的是String作為兩個程式之間的通訊!現在問題就來了,如果我們傳輸的是帶有關系型結構的資料,String怎麼表達呢?String對關系型資料不擅長,要是描述起來也難免會有歧義的時候!關系型資料如圖下所示:

- ②HTML語言本身就有缺陷:
- 标記都是固定的,不能自定義。HTML語言中有什麼标記就隻能用什麼标記
- HTML标簽本身就缺少含義(tr标簽裡面什麼内容都能放進去,不規範!)
- HTML沒有實作真正的國際化
XML檔案就解決了以上的問題了,如果使用XML描述上述圖檔的關系,是非常簡單的!
<?xml version="1.0" encoding="UTF-8" ?>
<中國>
<北京>
<海澱></海澱>
<豐台></豐台>
</北京>
<湖南>
<長沙></長沙>
<嶽陽></嶽陽>
</湖南>
<湖北>
<武漢></武漢>
<荊州></荊州>
</湖北>
</中國>
XML檔案還能使用浏覽器打開:
我們可以發現XML是可以描述很複雜的資料關系的
XML的用途
①:配置檔案(例子:Tomcat的web.xml,server.xml……),XML能夠非常清晰描述出程式之間的關系
②:程式間資料的傳輸,XML的格式是通用的,能夠減少交換資料時的複雜性!
③:充當小型資料庫,如果我們的資料有時候需要人工配置的,那麼XML充當小型的資料庫是個不錯的選擇,程式直接讀取XML檔案顯然要比讀取資料庫要快呢!
XML的技術架構
XML被設計為“什麼都不做”,XML資料或XML文檔隻用于組織、存儲資料,除此之外的資料生成、讀取、傳送、存取等等操作都與XML本身無關!
于是乎,想要操作XML,就需要用到XML之外的技術了:
- 為XML定規則:現在一般使用DTD或Schema技術,當然了Schema技術更為先進!
- 解析XML的資料:一般使用DOM或者SAX技術,各有各的優點
- 提供樣式:XML一般用來存儲資料的,但設計者野心很大,也想用來顯示資料(但沒人用XML來顯示資料),就有了XSLT(eXtensiable Stylesheet Language Transformation)可擴充樣式轉換語言
XML文法:
文檔聲明:
- XML聲明放在XML的第一行
- version—-版本
- encoding–編碼
- standalone–獨立使用–預設是no。standalone表示該xml是不是獨立的,如果是yes,則表示這個XML文檔時獨立的,不能引用外部的DTD規範檔案;如果是no,則該XML文檔不是獨立的,表示可以引用外部的DTD規範文檔。
- 正确的文檔聲明格式,屬性的位置不能改變!
<?xml version="1.0" encoding="utf-8" standalone="no"?>
元素
首先在這裡說明一個概念:在XML中元素和标簽指的是同一個東西!不要被不同的名稱所迷惑了!
元素中需要值得注意的地方:
- XML元素中的出現的空格和換行都會被當做元素内容進行處理
- 每個XML文檔必須有且隻有一個根元素
- 元素必須閉合
- 大小寫敏感
- 不能交叉嵌套
- 不能以數字開頭
看起來好像有很多需要值得注意的地方,其實隻需要記住:XML的文法是規範的!不要随意亂寫!
屬性
屬性是作為XML元素中的一部分的,命名規範也是和XML元素一樣的!
<!--屬性名是name,屬性值是china-->
<中國 name="china">
</中國>
注釋
注釋和HTML的注釋是一樣的
<!---->
CDATA
在編寫XML檔案時,有些内容可能不想讓解析引擎解析執行,而是當作原始内容處理。遇到此種情況,可以把這些内容放在CDATA區裡,對于CDATA區域内的内容,XML解析程式不會處理,而是直接原封不動的輸出
文法:
<![CDATA[
...内容
]]>
轉義字元
對于一些單個字元,若想顯示其原始樣式,也可以使用轉義的形式予以處理。
處理指令
處理指令,簡稱PI (processing instruction)。處理指令用來指揮解析引擎如何解析XML文檔内容。
例如:
在XML文檔中可以使用xml-stylesheet指令,通知XML解析引擎,應用css檔案顯示xml文檔内容。
<?xml-stylesheet type="text/css" href="1.css"?>
- XML代碼:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/css" href="1.css"?>
<china>
<guangzhou>
廣州
</guangzhou>
<shenzhen>
深圳
</shenzhen>
</china>
- CSS代碼:
guangzhou{
font-size: 40px;
}
- 效果:
JDK中的XML API
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>