4.1.1 XML文件結構
一個XML文件通常包含文件頭和文件體兩大部分
1. 文件頭
XML文件頭由XML聲明與DTD文件類型聲明組成。其中DTD文件類型聲明是可以缺少的,關於DTD聲明將在後續的內容中介紹,而XML聲明是必須要有的,以使文件符合XML的標準規格。
在前面的Flowers.xml文件中的第一行代碼即為XML聲明:
<?xml version="1.0" encoding="gb2312"?>
其中:
“ <? ”代表一條指令的開始,“ ?> ”代表一條指令的結束;
“ xml ”代表此文件是XML文件;
“ version="1.0" ”代表此文件用的是XML1.0標準;
“ encoding="gb2312" ” 代表此文件所用的字符集,默認值為Unicode,如果該文件中要用到中文,就必須將此值設定為gb2312。
注意:XML聲明必須出現在文檔的第一行。
2. 文件體
文件體中包含的是XML文件的內容,XML元素是XML文件內容的基本單元。從語法講,一個元素包含一個起始標記、一個結束標記以及標記之間的數據內容。
XML元素與HTML元素的格式基本相同,其格式如下:
<標記名稱 屬性名1= " 屬性值1 " 屬性名1= " 屬性值1 " ……>內容</標記名稱>
所有的數據內容都必須在某個標記的開始和結束標記內,而每個標記又必須包含在另一個標記的開始與結束標記內,形成嵌套式的分佈,只有最外層的標記不必被其他的標記所包含。最外層的是根元素(Root),又稱文件(Document)元素,所有的元素都包含在根元素內。
在前面的Flowers.xml文件中,根元素就是<Flowers>,根元素必須而且只能有一個,在該文件有三個<Flower>子元素,這樣的元素可以有多個。
4.1.2 XML的基本語法
1. 註釋
XML的註釋與HTML的註釋相同,以“ <!-- ”開始,以“ --> ”結束。
2. 區分大小寫
在HTML中是不區分大小寫的,而XML區分大小寫,包括標記,屬性,指令等。
3. 標記
XML標記與HTML標記相同,“ < ”表示一個標記的開始,“ > ” 表示一個標記的結束。XML中只要有起始標記,就必須有結束標記,而且在使用嵌套結構時,標記之間不能交叉。
在XML中不含任何內容的標記叫做空標記,格式為:<標記名稱/>
4. 屬性
XML屬性的使用與HTML屬性基本相同,但需要注意的是屬性值要加雙引號。
5. 實體引用
實體引用是指分析文檔時會被字符數據取代的元素,實體引用用於XML文檔中的特殊字符,否則這些字符會被解釋為元素的組成部分。例如,如果要顯示“ < ”,需要使用實體引用“ < ”否則會被解釋為一個標記的起始。
XML中有5個預定義的實體引用,如表 4 . 1所示。
表 4 . 1 XML 預定義的實體引用
< | < |
> | > |
" | " |
' | ' |
& | & |
6. CDATA
在XML中由一個特殊的標記CDATA,在CDATA中所有文本都不會被XML處理器解釋,直接顯示在瀏覽器中,使用方法如下:
<![CDATA[
這裡的內容可以直接顯示。
]]>
7. 處理指令
處理指令使用來給處理XML文件的應用程序提供信息的,處理指令的格式如下:
<?處理指令名稱 處理指令信息?>
例如,XML聲明就是一條處理指令:
<?xml version="1.0" encoding="gb2312"?>
其中,“ xml ”是處理指令名稱,version="1.0" encoding="gb2312"是處理指令信息。
4.2 XML 與CSS
利用CSS可以用來設定XML文件的顯示方式,即在XML文件的頭部,XML聲明的下面加入下面一條語句:
<?xml:stylesheet type="text/css" href="css文件的URL"?>
下面我們通過例子來介紹如何利用CSS來顯示XML文件。首先建立一個css文件,代碼如下:
flowers.css:一個顯示XML文件的CSS樣式
flower{font-size:24px; display:block}
vendor{font-size:36px;color:red}
price{display:block}
然後,在flowers.xml文件中使用這個css樣式,即在flowers.xml文件中的XML聲明下面加入以下語句:
<?xml:stylesheet type="text/css" href="flowers.css"?>
完整的程序代碼如下:
ex4_3_01.xml:利用CSS顯示XML文件
<?xml version="1.0" encoding="gb2312"?>
<?xml:stylesheet type="text/css" href="Flowers.css"?>
<Flowers>
<Flower>
<Vendor>shop1</Vendor>
<Name>iris</Name>
<Price>$4.00</Price>
</Flower>
<Flower>
<Vendor>shop2</Vendor>
<Name>iris</Name>
<Price>$4.30</Price>
</Flower>
<Flower>
<Vendor>shop3</Vendor>
<Name>iris</Name>
<Price>$3.50</Price>
</Flower>
</Flowers>
此例在瀏覽器中的顯示效果如圖 4 . 2所示。
用CSS來顯示XML文件時,不具備任何選擇性,也就是說,根元素之下的所有數據都會被全部顯示,不能改變原文件的結構和內容的順序。另外,CSS並不支持中文標記,因為CSS不是專門為XML開發的樣式語言,而下面要介紹到的XSL就可以,XSL是特別為XML設計的,它比CSS更為複雜。
4.3 XSL
在上一節介紹的用CSS顯示XML文件,效果不是很理想,實際上,CSS主要是適合HTML文件,對於XML這種數據文件,CSS就不適合了,尤其是對那些需要按照不同的條件將文件內容重新排列顯示的情況,而用XSL就可以。
XSL是當前最強大和靈活的樣式語言,是特別為應用XML而設計的,它比CSS要復雜的多。但是,目前它還未被很好的支持,也還沒有最後完成。
利用XSL來設定XML文件的顯示方式,即在XML文件的頭部,XML聲明的下面加入下面一條語句:
<?xml:stylesheet type="text/xsl" href="xsl文件的URL"?>
下面我們通過例子來介紹如何利用XSL來顯示XML文件。首先建立一個xsl文件,代碼如下:
flowers.xsl:用來顯示XML文件的xsl文件
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match = "/">
<table border="1">
<tr align="center">
<th width="100">Vendor</th>
<th width="100">Flower</th>
<th width="100">Price</th>
</tr>
<xsl:for-each select="//Flowers/Flower">
<tr align="center">
<td><xsl:value-of select="Vendor"/></td>
<td><xsl:value-of select="Name"/></td>
<td><xsl:value-of select="Price"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
我們可以看出:一個XSL文件就如一個空的HTML文件,通過填充一個XML文件產生一個傳統的HTML文件。
一個XSL文件首先必須有一個XML聲明(即第一行),因為XSL實際上是一種特殊的XML文件。XSL的根元素是xsl:stylesheet,即一個XSL文件必須以<xsl:stylesheet>標記開始,以</xsl:stylesheet>標記結束,xmlns:xsl屬性用於設定XSL的命名域。
XSL的根元素通常是由一個或多個樣板元素所組成,在此例中只包含單一樣板,它是由<xsl:template>標記開始,以<xsl:template>標記結束,使用match屬性可以在XML文件中選取符合條件的節點,即設定樣板名稱,對於最上層樣板,match設為“ / ”,代表整個XML文件的根元素。
然後是從XML文件中取得所需的數據,取得數據最簡單的方法是:
<xsl:value-of select="模式"/>
如果要取得多個元素,則要使用xsl:for-each元素,格式如下:
<xsl:for-each select="模式">
…..
</xsl:for-each>
接下來,我們要在flowers.xml文件中使用這個xsl文件,即在flowers.xml文件中的XML聲明下面加入以下語句:
<?xml:stylesheet type="text/xsl" href="flowers.xsl"?>
完整的程序代碼如下:
ex4_4_01.xml:利用XSL顯示XML文件
<?xml version="1.0" encoding="gb2312"?>
<?xml:stylesheet type="text/xsl" href="flowers.xsl"?>
<Flowers>
<Flower>
<Vendor>shop1</Vendor>
<Name>iris</Name>
<Price>$4.00</Price>
</Flower>
<Flower>
<Vendor>shop2</Vendor>
<Name>iris</Name>
<Price>$4.30</Price>
</Flower>
<Flower>
<Vendor>shop3</Vendor>
<Name>iris</Name>
<Price>$3.50</Price>
</Flower>
</Flowers>
http://blog.csdn.net/xueyepiaoling/article/details/5374689