簡介
了解XML的基本語法、Schema的語法還遠遠不夠,XML是對數據和數據結構的存儲,而Schema是對XML數據類型的定義。直到這
裡還沒有對XML數據的顯示進行處理。雖然可以通過內置有XML解析器的浏覽器直接對XML數據進行查看,但畢竟看到的只是以樹狀結構
顯示的XML數據。
如果要把XML數據以漂亮的形式顯示出來就需要XSLT幫忙了。XSLT可以把XML處理成Html形式輸出、WAP形式輸出,甚至也可以
是Word文檔的格式。其中最常用到的還是HTML的格式,下面講解中用到的所有例子都以Html的轉換格式為例子。那就不說廢話了,還
是先看一個XSLT的例子吧!
這個XSLT用到的一個XML文檔,文檔如下:
<?XML version = "1.0" encoding="GB2312"?>
<?XML:stylesheet type="text/xsl" href="s_xlt.xslt"?>
<resumes>
<resume>
<name>張立東</name>
<sex>男</sex>
<age>28</age>
<birthday>
<year>1974</year>
<month>8</month>
<day>10</day>
</birthday>
<address>北京市 海澱區</address>
</resume>
<resume>
<name>張三</name>
<sex>男</sex>
<age>50</age>
<birthday>
<year>1951</year>
<month>6</month>
<day>9</day>
</birthday>
<address>山西省</address>
</resume>
<resume>
<name>李四</name>
<sex>男</sex>
<age>29</age>
<birthday>
<year>1973</year>
<month>7</month>
<day>12</day>
</birthday>
<address>山東省</address>
</resume>
</resumes>
注:在上面的XML文檔中多了下面的一句:
<?XML:stylesheet type="text/xsl" href="s_xlt.xslt"?>
這一句就是對XSLT的引用,其中href中的內容是對具體XSLT文檔位置的指定,有關s_xlt.xslt中的內容就是下面要介紹的XSL
T例子的內容。有關如何對XML,XLST、Schema的使用和測試,可以參考“一個應用了XML、schema和xlst的例子”部分。
對這個XML文檔進行轉換處理的XSLT文檔如下:
[1]<?XML version="1.0" encoding="GB2312"?>
[2]<xsl:stylesheet version="1.0" XMLns:xsl="http://www.w3.org/TR/WD-xsl">
[3] <xsl:template match="/">
[4] <Html>
[5] <HEAD>
[6] <TITLE>個人簡歷</TITLE>
[7] </HEAD>
[8] <BODY>
[9] <xsl:for-each select="/resumes/resume">
[10] <P>
[11] <TABLE border="1" >
[12] <CAPTION style="font-size: 150%; font-weight: bold">
[13] 個人簡歷
[14] </CAPTION>
[15] <TR>
[16] <TH>姓名</TH><TD><xsl:value-of select="name"/></TD>
[17] <TH>性別</TH><TD><xsl:value-of select="sex"/></TD>
[18] <TH>生日</TH><TD><xsl:value-of select="birthday/year"/>年
<xsl:value-of select="birthday/month"/>月<xsl:value-of select="birthday/day"/>日</TD>
[19] </TR>
[20] <TR>
[21] <TH>地址</TH><TD colspan="5"><xsl:value-of select="address"/></TD>
[22] </TR>
[23] </TABLE>
[24] </xsl:for-each>
[25] </BODY>
[26] </Html>
[27] </xsl:template>
[28]</xsl:stylesheet>
[1]XML的序言,從第一條語句可以看出XSLT也是符合XML語法的。
[2]XSLT的名域。Xsl:stylesheet是XSLT的根元素,xsl是XSLT的名域標識。所以都要在XSLT的語句前面加上xsl:來表明是XSLT
的語句。
[3] <xsl:template match="/"> 是XSLT語言的匹配模式,主要是和引用它的XML文檔的根進行匹配。其中/是代表XML文檔根的含
義。 例如:個人簡介中的name可以用/resumes/resume/name
的方式進行引用。(由於這裡只是對XSLT入門的一個初步介紹,對有關XML路徑想詳細了解的讀者可以參考XML文檔的XPATH部分。)
[4]-[8]可以直接輸出,這部分是符合HTML語法的信息結構,Html文檔的開始部分和head的定義。
[9] <xsl:for-each select="/resumes/resume">是XSLT語言的選擇模式,是循環的對所有的/resumes/resume元素和這個元素所
包含的子元素進行處理。
[10]-[15] 可以直接輸出,符合Html的語法結構。
[16] <TH>姓名</TH><TD><xsl:value-of select="name"/></TD>
在這一行中有Html的語句和也有XSLT的語句。其中<xsl:value-of select="name"/>也是屬於選擇模式的語句,可以直接把select選中
的元素內容提取處理,處理以後的結果應該是:<TH>姓名</TH><TD>張立東</TD>。
[18]-[23]分別是對其他部分信息的顯示處理,其中也包含了部分的Html語句。
[24] <xsl:for-each> 語句的結束部分。
[25]-[26]Html語句。
[27] <xsl:template> 語句的結束部分。也就是對整個XML文檔處理的結束。因為每個XML文檔只有一個根而這條語句是對根的部
分處理,所以是對整個XML文檔處理的結束。
[28] XSLT文檔的結束。
經上面對這個簡單例子的介紹,大家對XSLT對XML文檔的處理可能已經有了一個基本的了解,可以簡單的通過XSLT對XML進行
處理啦。在結束這個部分之前對XSLT的語法做一個簡單的小結:
可以大致的把模式語言分為三種:
選擇模式
<xsl:for-each>、<xsl:value-of>,和 <xsl:apply-templates>
測試模式
<xsl:if> 和<xsl:when>
匹配模式
<xsl:template>
選擇模式語句將數據從XML中提取出來,這是一種簡單獲得數據的方法。這幾個標記都有一個select屬性,選取XML中特定結
點名的數據。
測試模式是對數據的一個判斷,然後根據判斷和匹配的結果進行處理。有些和程序語言中的判斷語句和多判斷語句形似。
匹配模式是一個可以單獨列出來的XSLT語句片斷,可以完成對一個特定部分的XSLT處理。有些和程序設計中的子程序相似。