XML介紹
eXtensible Markup Language
XML是一種元標記語言,用戶可以定義自己需要的標記。
Document Type Definition, DTD文檔類型定義。
XML描述的是結構、內容和語義,它不描述頁面元素的格式化。
對比:HTML側重於如何表現信息,內容描述與顯示整合為一體。
XML中的每個元素名都是成對出現的。結束標簽前加一個/
如:
<?xml version="1.0"?> <Student> <Name>ZhangSan</Name> <ID>001</ID> </Student>
文檔的后綴名是xml,每個文檔有且僅有一個根元素。
所謂根元素就是包含了其他所有元素的元素。
XML vs HTML
使用XML可以實現異構語言、異構平台之間的交互。
XML1.0語法
XML目前只有一個版本,即1.0.
XML是自描述數據,使用現有的國際標准。
XML中有格式正規的XML和有效的XML。本文講格式正規的。
遵循如下規則的XML文檔稱為格式正規的XML文檔:
語法規范:
必須有XML聲明語句;
必須有且僅有一個根元素;
標記大小寫敏感;
屬性值用引號;
標記成對;
空標記關閉;
元素正確嵌套。
元素語法:
名稱中可以包含字母、數字或者其他字符;
名稱不能以數字開頭;
不能以XML/xml/Xml…開頭;
名稱中不能含空格;
名稱中不能含冒號(注:冒號留給命名空間使用)。
XML解析器
XML解析器是讀取XML文檔並提供對文檔內容的訪問的軟件模塊。
類型:無驗證的解釋器和驗證的解釋器。
解析器:
MSXML IE
IBM XML4J
Apache Xerces
Oracel XML Parser
XML文檔
一個XML文檔:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--第一行是XML聲明--> <!--這是XML處理指令的例子。處理指令以<?開始,以?>結束--> <!--在<?后的第一個單詞是處理指令名,在本例中是xml--> <!--處理指令一定要頂格寫,前面不能有任何空白--> <students> <GREETING><!--開始標記--> Hello World<!--元素內容--> </GREETING><!--結束標記--> <student gender="male" isHandsome="true"> <id>001</id> <name>zhangsan</name> <address>Beijing</address> <score>50</score> </student> <student gender="female"> <id>002</id> <name>lisi</name> <address>北京</address> <score/><!--為空的簡寫形式--> </student> </students>
如其中注釋:
<!--第一行是XML聲明-->
<!--這是XML處理指令的例子。處理指令以<?開始,以?>結束-->
<!--在<?后的第一個單詞是處理指令名,在本例中是xml-->
<!--處理指令一定要頂格寫,前面不能有任何空白-->
處理指令一定要頂格寫,前面不能有任何空白。
處理指令的?前面后面都不能有空格。
但元素中的空白是允許的。
文檔注釋用<!-- 和-->包圍,不允許嵌套,允許多行注釋。
XML里面的元素嚴格區分大小寫。
XML文檔必須有且只有一個根元素。
根元素是一個完全包括文檔中其他所有元素的元素。
XML文檔聲明
每一個XML文檔都以一個XML聲明開始,用以指明所用的XML的版本。
XML聲明有version 、encoding和standalone特性。
特性是由等號分開的名稱-數值對。位於等號左邊的是特姓名,而其值位於等號的右邊,並用雙引號或單引號括起來。
在上例中,version特性表明這個文檔符合XML 1.0規范。
XML聲明還可以有standalone特性,這告訴我們文檔是否在這一個文件里,還是需要從外部導入文件。
encoding 屬性指定了編碼格式,默認情況下是utf-8,這個屬性要放在standalone屬性前面。
注意本文文件保存時候默認的編碼格式是ANSI,需要利用記事本把它手動改為UTF-8保存。
屬性
如上所述,
屬性(特性)是由等號分開的名稱-數值對。
位於等號左邊的是特姓名,而其值位於等號的右邊,並用雙引號或單引號括起來。
自定義的元素也可以有一個或多個屬性,其屬性值使用單引號或者雙引號括起來。
如果屬性值中有雙引號則使用單引號,反之亦然。
屬性的形式為:
屬性名= "屬性值",比如gender="male"。
多個屬性值之間用空格隔開(一個或多個空格都可以)。
在一個元素上,相同的屬性只能出現一次。
屬性值不能包含<, >, &。
實體
實體叫ENTITY,實體的作用是避免重復輸入。作用相當於宏或者變量。
XML中內置的5種實體:
自定義實體語法:
<!DOCTYPE 根元素[
<!ENTITY 實體名 "實體內容">
]>
引用已定義的實體:
&實體名;
使用實體的例子:
XML代碼:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE test[ <!--實體聲明--> <!ENTITY comA "Company A"> <!ENTITY addA "Some Place"> ]> <test> <!--直接寫進去的方法--> <company> <name>Company A</name> <address>Some Place</address> </company> <!--用實體的方法--> <company> <name>&comA;</name> <address>&addA;</address> </company> </test>
用Chrome打開:
可見使用實體和直接寫值的效果是一樣的,實體所代表的值被瀏覽器代入。
文檔類型定義——DOCTYPE
文檔類型聲明,緊跟XML聲明之后,包含所有實體聲明。
語法:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE 根元素標記名[ <!--實體聲明--> ]>
實例如上,實體部分。
處理指令PI
處理指令用於XML解析器傳遞信息到應用程序。
語法:<?目標 指令?>
PI必須以一個叫做目標的標識符開頭,這個標識符遵從如同元素和屬性一樣的規則,目標是指令所指向的應用的名稱,指令是傳遞給應用程序的信息。
為XML文檔編寫樣式單
XML允許用戶來創建任何所需要的標記。
當然,由於用戶在創建標記上有完全的自由,因而通用的瀏覽器無法預期用戶標記的意義,也無法為顯示這些標記而提供規則。
因而,用戶必須為文檔編寫樣式單,告訴瀏覽器如何顯示特定的標記。
與標記集類似,用戶創建的樣式單可由不同的文檔不同的人所共享,還可將自己創建的樣式單與其他人編寫的樣式單集成在一起。
比如編寫樣式hello.css:
GREETING{display:block; font-size:24pt; font-weight:bold
加入樣式的方法,是在XML文檔中包括一個處理指令,指定所要使用的樣式單:
<?xml-stylesheet type="text/css" href="hello.css"?>
完整的XML文檔如下:
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--第一行是XML聲明--> <!--這是XML處理指令的例子。處理指令以<?開始,以?>結束--> <!--在<?后的第一個單詞是處理指令名,在本例中是xml--> <!--處理指令一定要頂格寫,前面不能有任何空白--> <!--另一個處理指令,表明要采用hello.css定義的樣式 (使用當前目錄下的hello.css)--> <?xml-stylesheet type="text/css" href="hello.css"?> <students> <GREETING><!--開始標記--> Hello World<!--元素內容--> </GREETING><!--結束標記--> <student gender="male" isHandsome="true"> <id>001</id> <name>zhangsan</name> <address>Beijing</address> <score>50</score> </student> <student gender="female"> <id>002</id> <name>lisi</name> <address>北京</address> <score/><!--為空的簡寫形式--> </student> </students>
通過樣式,我們可以實現XML內容與展現形式的分離。
為XML文檔編寫樣式單可以用CSS或XSL,XSL比CSS復雜。
CDATA節
用於把整段文本解釋為純字符數據而不是標記的情況。
包含大量的<、>、&、或者"字符。CDATA節中的所有字符都會被當做元素字符數據的常量部分,而不是XML標記。
語法:
<![CDATA[ ...... ]]>
可以輸入任意字符(除]]外),不能嵌套。
<?xml version="1.0" encoding="utf-8"?> <root> <![CDATA[ <hello> <world> 這里放任何內容都是合法的 ]]> <subRoot> </subRoot> </root>
參考資料
聖思園張龍老師教學視頻。