曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
文檔變換成客戶端能夠理解的XML 應用程序。盡管將來有些瀏覽器很可能能夠處理XSL 格式化對象,但HTML 是很有希望的
選擇方案。
XML 實用大全
第 454 頁
將XSL 樣式單與XML 文檔相鏈接是很容易的,只需要緊跟在XML 聲明之后插入序言中的xml-stylesheet 處理指令。這種處
理指令應有text/xsl 值的type 特性,以及其值為指向此樣式單的URL 的href 特性。例如:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="14-2.xsl"?>
這也是將CSS 樣式單與文檔鏈接的方法。這里的唯一區別是type 特性具有text/xsl 值,而不是text/css 值。
Internet Explorer 5.0 的XSL 支持在許多方面與1999 年4 月21 日制定的草案有差異。首先,它期望XSL 元素放在
http://www.w3.org/TR/WD-xsl 命名域中,而不是http://www.w3.org/XSL/Transform/1.0 命名域,盡管xsl 前綴仍然使用。
其次,當元素不與任何模板相匹配時,并不執行此元素的缺省規則。因此,在Internet Explorer 中瀏覽文檔時,需要從根
元素開始為分級結構中的每個元素提供一個模板。清單14-4 顯示了這種情況。三條規則依次與根節點、根元素
PERIODIC_TABLE 和ATOM 相匹配。圖14-3 顯示的是使用此樣式單將清單14-1 加載到Internet Explorer 5.0 中之后的XML
文檔。
清單14-4:將清單14-2 調整為可在Internet Explorer 5.0 下運行的樣式單
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="PERIODIC_TABLE">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ATOM">
<P>
<xsl:value-of select="."/>
</P>
</xsl:template>
XML 實用大全
第 455 頁
</xsl:stylesheet>
圖14-3 將清單14-4 中調整過的XSL 樣式單應用于清單14-1 中的XML 文檔, 在Internet Explorer 5.0 中生成的頁面
理想的情況是,相同的XML 文檔既可用于直接顯示也可以預處理成HTML。不幸的是,XT 不接受http://www.w3.org/TR/WD-xsl
命名域,而IE 5 不接受http://www.w3.org/XSL/Transform/1.0 命名域。 由于不同的處理程序在對改進的XSL 規范各部分
的支持方面起到各有所長的作用,所以我們仍然處于這種痛苦的境地。
在本章剩下來的部分,在將文檔裝入瀏覽器之前,我將把它簡單地預處理成HTML 格式。
XML 實用大全
第 456 頁
14.3 XSL 模板
由xsl:template 元素定義的模板規則是XSL 樣式單的最重要的部分。每個模板規則都是一個xsl:template 元素。這些規則
將特定的輸出與特定的輸入相關聯。每個xsl:template 元素都有一個match 特性,用來指定要將此模板應用于輸入文檔的
哪個節點。
xsl:template 元素的內容是要運用的實際模板。模板可能既包含逐字顯示在輸出文檔中的文本,同時也包含從輸入XML 文
檔將數據復制到結果的XSL 指令。因為所有的XSL 指令都放在xsl 命名域中(即它們都是以xsl:開頭),所以要區分元素
(這些元素就是復制到輸出的實際數據)和XSL 指令是很容易的。例如,下面為一個應用于輸入樹形結構根節點的模板:
<xsl:template match=”/”>
<html>
<head>
</head>
<body>
</body>
</html>
</xsl:template>
當XSL 處理程序讀取此輸入文檔時,它所看到的第一個節點就是根節點。下面的規則與此根節點相匹配,并告訴XSL 處理程
序發送此文本:
<html>
<head>
</head>
<body>
</body>
</html>
這種文本就是結構整潔的HTML。由于XSL 文檔本身就是XML 文檔,所以其內容(包括模板在內)也必須是結構整潔的XML。
如果要在XSL 樣式單中使用上面的規則,并且只在XSL 樣式單中使用的話,那么輸出就只限于上面的六個標記。(實際上,
可壓縮為四個等價的標記:<html> <head/> <body/> </html>)。這是由于在規則中沒有任何指令告訴格式化程序沿樹形結
構逐級下移,以便尋找與樣式單中的模板進一步的匹配。
14.3.1 xsl:apply-templates 元素
XML 實用大全
第 457 頁
要達到根節點以外的地方,就要告訴格式化引擎處理根節點的子節點。一般來說,為了包括子節點中的內容,需遞歸處理整
個XML 文檔中的節點。可以用來達到此目的的元素就是xsl:apply-templates。把xsl:apply-templates 放在輸出模板中,
就可以告訴格式化程序把與源元素匹配的每個子元素同樣式單中的模板相比較。用于匹配節點的模板本身可能包含
xsl:apply-templates 元素,以便搜索與其子節點的匹配。當格式化引擎處理節點時,此節點是作為整個樹形結構來看待的。
這是樹形結構的優點所在。每個部分都是以處理整體相同的方式來處理。例如,清單14-5 就是使用xsl:apply-templates
元素來處理子節點的XSL 樣式單。
清單14-5:遞歸處理根下子節點的XSL 樣式單
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">
<xsl:template match="/">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="PERIODIC_TABLE">
<body>
<xsl:apply-templates/>
</body>
</xsl:template>
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML實用大全(129)