您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何將XSLT作為HTML的樣式表的使用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
簡(jiǎn)介
當(dāng)聽到樣式表這個(gè)詞時(shí),您可能會(huì)想到 CSS 樣式表。XSLT 樣式表通常用于 XML 轉(zhuǎn)換,比如在 Web 服務(wù)之間映射數(shù)據(jù)。因?yàn)?XSLT 非常適合此用途,所以創(chuàng)建了頂層元素 <stylesheet> 的 <xsl:transform> 別名,雖然這很少使用。這種 XSLT 轉(zhuǎn)換的輸入結(jié)構(gòu)與輸出結(jié)構(gòu)有很大的不同。最重要的是,命名空間的不同。
XSLT 樣式表的輸入結(jié)構(gòu)與輸出結(jié)構(gòu)相似,但卻更簡(jiǎn)單些。其中已經(jīng)擴(kuò)充了一些標(biāo)記,但大部分標(biāo)記只是原樣復(fù)制到輸出。輸入和輸出的命名空間是相同的 (HTML)。輸入文檔也可以包含樣式表指令(比如創(chuàng)建腳注),這些指令屬于另一個(gè)命名空間,不會(huì)傳遞到輸出中。
常用縮略語
CSS:級(jí)聯(lián)樣式表
XHTML:可擴(kuò)展超文本標(biāo)記語言
XPath:XML 路徑語言
XSLT:可擴(kuò)展樣式表語言轉(zhuǎn)換
在本文中,我們將學(xué)習(xí)如何使用 XSLT 樣式表擴(kuò)充 XHTML 文檔。文中的示例展示了如何使用指令,如何引用其他源文檔的部分,以及如何使用鏈接在主文檔中導(dǎo)航。此外,我們還探索了頁面的解釋和編譯之間的區(qū)別。
CSS 樣式表的局限性
XSLT 樣式表不會(huì)阻止您使用其他技術(shù),比如 JavaScript 或 CSS。CSS 適用于字體、加粗、顏色、間距等。它不適合將來自不同位置的信息組合在一起,比如腳注、模塊或生成一個(gè)目錄。這正是 XSLT 的用武之地,它補(bǔ)充而不是替代了 CSS。
XSLT 用途示例
實(shí)際上,您可以將 XSLT 代碼集中在一個(gè)文件中。為了簡(jiǎn)單起見,本文中的每個(gè)示例均位于一個(gè)獨(dú)立的 XSLT 文件中,除了一些必要的代碼。清單 1 給出了必需的代碼。
清單 1. 必需的代碼(位于 samples/common.xml 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<s:stylesheet
<span style="width: auto; height: auto; float: none;" id="24_nwp"><a style="text-decoration: none;" mpid="24" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="24_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>ns="http://www.w3.org/1999/xhtml"
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:a="http://sourceforge.net/projects/arbalo/"
xmlns:s="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="a h"
version="1.0"
>
<s:template match="h:<span style="width: auto; height: auto; float: none;" id="25_nwp"><a style="text-decoration: none;" mpid="25" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=head&k0=head&kdi0=0&luki=9&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="25_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">head</span></a></span>">
<s:copy>
<s:apply-templates select="@*|node()"/>
<meta
http-equiv="content-type"
content="text/html;charset=UTF-8" />
<link
href="common.<span style="width: auto; height: auto; float: none;" id="26_nwp"><a style="text-decoration: none;" mpid="26" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=css&k0=css&kdi0=0&luki=8&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="26_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">css</span></a></span>"
rel="stylesheet"
type="text/css" />
</s:copy>
</s:template>
<s:template match="*">
<s:copy>
<s:copy-of select="@*"/>
<s:apply-templates/>
</s:copy>
</s:template>
</s:stylesheet>
XHTML 的命名空間定義了兩次:默認(rèn)定義和 h:。默認(rèn)命名空間用于編寫輸出 XHTML 標(biāo)記,其中應(yīng)該避免使用命名空間前綴。h: 用在 XPath 表達(dá)式中。
本文使用 XSLT 1.0 版本。目前,大部分瀏覽器都無法解釋 XSLT 2.0。但是,如果 XSLT 運(yùn)行在服務(wù)器上,那么它可能是一個(gè)實(shí)用的選擇。XSLT 2.0 還提供了:
XPATH 2.0(if…then…else 和許多內(nèi)置的函數(shù))
內(nèi)置和用戶編寫的 XPATH 函數(shù)
分組
在 清單 1 中:
s:template match="head" 擴(kuò)充了源文檔的 head 一節(jié),添加了一個(gè) CSS 樣式表的鏈接。即使 UTF-8 是在 XML 中的默認(rèn)編碼,一些瀏覽器也需要內(nèi)容類型才能呈現(xiàn)它。
s:template match="*" 是默認(rèn)的詳細(xì)副本。原則上,所有內(nèi)容都會(huì)復(fù)制到目標(biāo)文檔中。如果遺漏了此模板,只會(huì)將標(biāo)記的文本內(nèi)容復(fù)制到目標(biāo)文檔。不會(huì)復(fù)制處理指令節(jié)點(diǎn)。
本文中的所有其他示例都是導(dǎo)入 common.xsl 的獨(dú)立文件。
擴(kuò)充
通過擴(kuò)充,添加了一個(gè)未在源文檔中顯式請(qǐng)求的特性。一個(gè)示例是 清單 1 中的 CSS 樣式表的鏈接。嘗試另一個(gè)示例,向每個(gè)內(nèi)部鏈接添加一個(gè)小箭頭 (^ v),指明目標(biāo)在它之前還是之后。清單 2 給出了該樣式表。
清單 2. 樣式表(在 samples/linkUpDown.xsl 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<s:stylesheet
<span style="width: auto; height: auto; float: none;" id="22_nwp"><a style="text-decoration: none;" mpid="22" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="22_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>ns="http://www.w3.org/1999/xhtml"
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:s="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<s:import href="common.xsl"/>
<s:template match="h:a[starts-with(@href,'#')]">
<s:copy>
<s:copy-of select="@*"/>
<s:variable name="name" select="substring-after(@href,'#')"/>
<s:choose>
<s:when test="preceding::h:a[@name=$name]">
<s:text>^</s:text>
</s:when>
<s:when test="following::h:a[@name=$name]">
<s:text>v</s:text>
</s:when>
</s:choose>
<s:apply-templates/>
</s:copy>
</s:template>
</s:stylesheet>
首先,導(dǎo)入清單 2 中的通用樣式表。模板與內(nèi)部鏈接(以 '#' 開頭)相匹配。如果鏈接指向的錨點(diǎn)位于鏈接之前,那么使用一個(gè)向上箭頭擴(kuò)充該鏈接(如果情況相反,則使用向下箭頭)。
s:copy-of 和 s:apply-templates 可確保不會(huì)沿途丟下任何內(nèi)容。
清單 3 給出了一個(gè)示例文檔(其中包含內(nèi)部鏈接),它經(jīng)過了清單 2 中的樣式表進(jìn)行擴(kuò)充。
清單 3. 源文檔(在 samples/linkUpDown.xml 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<?<span style="width: auto; height: auto; float: none;" id="20_nwp"><a style="text-decoration: none;" mpid="20" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="20_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>-stylesheet href="linkUpDown.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<<span style="width: auto; height: auto; float: none;" id="21_nwp"><a style="text-decoration: none;" mpid="21" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=head&k0=head&kdi0=0&luki=9&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="21_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">head</span></a></span>/>
<body>
<a name="a"/>
<p>This link goes <a href="vb">downward.</a></p>
<br/>
<p>Reduce the size of the window to verify the link really works.</p>
<br/>
<a name="b"/>
<p>This link goes <a href="^a">upward.</a>
</p>
</body>
</html>
目標(biāo)文檔看起來相同,除了清單 4 中的條目。
清單 4. 目標(biāo)文檔(在 samples/linkUpDown.html 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
… <a href="#b">v downwards.</a> …
… <a href="#a">^ upwards.</a> …
指令
您可以在源文檔中添加一些指令,告訴樣式表執(zhí)行何種操作。它們屬于另一個(gè)命名空間(在本例中為前綴 a:),不會(huì)被復(fù)制到目標(biāo)文檔。
在清單 5 中,源文檔中任何地方的指令標(biāo)記 a:ref 都會(huì)創(chuàng)建一個(gè)腳注。
清單 5. 樣式表(在 samples/footnote.xsl 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<s:stylesheet
<span style="width: auto; height: auto; float: none;" id="19_nwp"><a style="text-decoration: none;" mpid="19" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="19_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>ns="http://www.w3.org/1999/xhtml"
xmlns:a="http://sourceforge.net/projects/arbalo/"
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:s="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<s:import href="common.xsl"/>
<s:template match="h:body">
<s:copy>
<s:apply-templates select="@*|node()"/
<!-- put the footnotes at the end
if there is no a:references directive -->
<s:if test="not(descendant::a:references)">
<s:call-template name="references"/>
</s:if>
</s:copy>
</s:template>
<!-- Create a footnote -->
<s:template match="a:ref">
<s:variable
name="number"
select="count(preceding::a:ref) + 1"/>
<a name="ref-{$number}"></a>
<a class="footnote" href="#reference-{$number}">
<s:value-of select="concat('v ',$number)"/>
</a>
</s:template>
<!-- if a:reference is missing, assume it at the end of the body -->
<s:template match="a:references" name="references">
<hr/>
<s:for-each select="//a:ref">
<s:variable name="number" select="count(preceding::a:ref) + 1"/>
<p>
<a name="reference-{$number}"></a>
<a class="footnote" href="#ref-{$number}">
<s:value-of select="concat(' ^',$number)"/>
</a>
<s:apply-templates/>
</p>
</s:for-each>
</s:template>
</s:stylesheet>
使用源文檔中的 a:references 指令,名為 references 的模板會(huì)在模板與該指令匹配的地方分配腳注。如果缺少這樣一個(gè)指令,第一個(gè)與 body 匹配的模板會(huì)在 body 的末尾分配腳注,方法是調(diào)用名為 references 的相同模板。在兩種情況下,都會(huì)列出腳注的內(nèi)容,并生成一個(gè)由向上箭頭表示的向上鏈接。
第二個(gè)模板(匹配 a:ref)使用向下箭頭創(chuàng)建腳注的鏈接。腳注具有編號(hào)。這里忽略了它的內(nèi)容。
class="footnote" 屬性在 XSLT 轉(zhuǎn)換之后由一個(gè) CSS 樣式表解析,該樣式表鏈接在 XSLT 樣式表 common.xsl 中。
清單 6 中的源文檔使用 a:ref 指令創(chuàng)建腳注。
清單 6. 源文檔(在 samples/footnote.xml 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<?<span style="width: auto; height: auto; float: none;" id="17_nwp"><a style="text-decoration: none;" mpid="17" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="17_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>-stylesheet href="footnote.xsl" type="text/xsl"?>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:a="http://sourceforge.net/projects/arbalo/"
>
<<span style="width: auto; height: auto; float: none;" id="18_nwp"><a style="text-decoration: none;" mpid="18" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=head&k0=head&kdi0=0&luki=9&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="18_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">head</span></a></span>/>
<body>
<p>
This example looks a little scientific
<a:ref>
From Latin
<em>scientia</em>
</a:ref>
and academic
<a:ref>From Greek akademia</a:ref>.
</p>
<p>
Do you know why?
<a:ref>
It uses
<em>footnotes</em>.
</a:ref>
</p>
<p>Reduce size of window to verify links are generated.</p>
</body>
</html>
目標(biāo)文檔將腳注列表包含在底部,如清單 7 所示。
清單 7. 目標(biāo)文檔(在 samples/footnote.html 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<html
<span style="width: auto; height: auto; float: none;" id="14_nwp"><a style="text-decoration: none;" mpid="14" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="14_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>ns="http://www.w3.org/1999/xhtml"
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:a="http://sourceforge.net/projects/arbalo/">
<<span style="width: auto; height: auto; float: none;" id="15_nwp"><a style="text-decoration: none;" mpid="15" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=head&k0=head&kdi0=0&luki=9&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="15_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">head</span></a></span>><link type="text/<span style="width: auto; height: auto; float: none;" id="16_nwp"><a style="text-decoration: none;" mpid="16" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=css&k0=css&kdi0=0&luki=8&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="16_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">css</span></a></span>" rel="stylesheet" href="common.css"/></head>
<body>
<p>This example looks a little scientific
<a name="ref-1"/><a href="#reference-1" class="footnote">v 1</a>
and academic.
<a name="ref-2"/><a href="#reference-2" class="footnote">v 2lt;/a>
</p>
<p>Do you know why?
<a name="ref-3"/><a href="#reference-3" class="footnote">v 3</a>
</p>
<p>Reduce size of window to verify links are generated.</p>
br/><br/>
<hr/>
<p><a name="reference-1"/><a href="#ref-1" class="footnote"> ^1</a>
From Latin
<em>scientia</em>
</p>
<p><a name="reference-2"/>
<a href="#ref-2" class="footnote"> ^2</a>From Greek akademia</p>
<p><a name="reference-3"/><a href="#ref-3" class="footnote"> ^3</a>
It uses
<em>footnotes</em>.
</p>
</body>
</html>
突破源文檔的邊界
也可引用其他源文檔的其中一些部分。a:include 指令包含一個(gè)可能屬于另一個(gè)源文檔的元素并轉(zhuǎn)換它,如清單 8 所示。
清單 8. 樣式表(在 samples/include.xsl 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<s:stylesheet
<span style="width: auto; height: auto; float: none;" id="12_nwp"><a style="text-decoration: none;" mpid="12" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="12_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>ns="http://www.w3.org/1999/xhtml"
xmlns:a="http://sourceforge.net/projects/arbalo/"
xmlns:s="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<s:import href="common.xsl"/>
<s:template match="a:include">
<s:choose>
<s:when test="0!=string-length(@src)">
<s:apply-templates
select="document(@src)//*[@id=current()/@refid]"/>
</s:when>
<s:when test="not(@<span style="width: auto; height: auto; float: none;" id="13_nwp"><a style="text-decoration: none;" mpid="13" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=src&k0=src&kdi0=0&luki=7&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="13_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">src</span></a></span>) and //a:default[1]/@src">
<s:apply-templates
select="document(//a:default[1]/@src)//*[@id=current()/@refid]"/>
</s:when>
<s:when test="0=string-length(@src) or not(//a:default[1]/@src)">
<s:apply-templates
select="//*[@id=current()/@refid]"/>
</s:when>
</s:choose>
</s:template>
</s:stylesheet>
源文檔中的一個(gè) a:include 指令引用源元素的 id。包含該元素的文檔可在一個(gè) src 屬性中命名。如果缺少該屬性,將使用 a:default 指令的 src 屬性。如果在任何地方都沒有 src 屬性,則使用同一個(gè)源文檔。因此,refid 會(huì)引用 id 來避免無限的遞歸。
導(dǎo)入的元素可能具有一種復(fù)雜的類型,并在包含 (apply-templates)之后進(jìn)行轉(zhuǎn)換。清單 9、清單 10 和清單 11 給出了示例。
清單 9. 源文檔(在 samples/include.xml 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<?<span style="width: auto; height: auto; float: none;" id="7_nwp"><a style="text-decoration: none;" mpid="7" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=xml&k0=xml&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="7_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">xml</span></a></span>-stylesheet href="include.xsl" type="text/xsl"?>
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:a="http://sourceforge.net/projects/arbalo/">
<<span style="width: auto; height: auto; float: none;" id="8_nwp"><a style="text-decoration: none;" mpid="8" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=head&k0=head&kdi0=0&luki=9&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="8_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">head</span></a></span>>
<a:default <span style="width: auto; height: auto; float: none;" id="9_nwp"><a style="text-decoration: none;" mpid="9" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=src&k0=src&kdi0=0&luki=7&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="9_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">src</span></a></span>="includedY.xml"/>
</head>
<body>
<p>The following text is included:</p>
<a:include refid="x" src="includedX.xml"/>
<a:include refid="y1"/>
<p id="i"><span style="width: auto; height: auto; float: none;" id="10_nwp"><a style="text-decoration: none;" mpid="10" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=double&k0=double&kdi0=0&luki=6&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="10_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">double</span></a></span></p>
<a:include refid="y2"/>
<a:include refid="i" src=""/>
</body>
</html>
清單 10. 源文檔的部分(在 samples/includeY.xml 中)
XML/HTML Code復(fù)制內(nèi)容到剪貼板
<h3 id="y2">I'm the <em>included</em> h3</h3>
<h2 id="y1">I'm the <em>included</em> h2</h2>
清單 11. 目標(biāo)文檔(在 samples/include.html 中)
XML/HTML
<body>
<p>The following text is included:</p>
<p id="x">I'm the <em>included</em> paragraph.</p>
<h2 id="y1">I'm the <em>included</em> h2</h2>
<p id="i"><span style="width: auto; height: auto; float: none;" id="6_nwp"><a style="text-decoration: none;" mpid="6" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=0&is_app=0&jk=d14555d819ab7000&k=double&k0=double&kdi0=0&luki=6&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=70ab19d85545d1&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F1117%2Ehtml&urlid=0" id="6_nwl"><span style="color:#0000ff;font-size:14px;width:auto;height:auto;float:none;">double</span></a></span></p>
<h3 id="y2">I'm the <em>included</em> h3</h3>
<p id="i">double</p>
</body>
</html>
主文檔和導(dǎo)航
如果您有一個(gè)包含多個(gè)頁面的演示,有一個(gè)主文檔包含頁面標(biāo)題及其鏈接。您可以生成完整的導(dǎo)航,從每個(gè)頁面到任何其他頁面,以及到前一個(gè)和后一個(gè)頁面。這些細(xì)節(jié)不屬于本文的介紹范圍,但 參考資料 中提供了使用主文檔的 HTML 演示的鏈接。可將 .xml 替換為 .html 來獲得編譯后的版本。讓瀏覽器向您顯示 .xml 的整潔源代碼。您會(huì)對(duì)它生成的源代碼量感到驚奇。
解釋與編譯的對(duì)比
解釋意味著頁面為 XML 格式(其文件擴(kuò)展名為 .xml,其內(nèi)容類型為文本/xml 或應(yīng)用程序/xml),并且處理指令所引用的 XSLT 樣式表可在瀏覽器中執(zhí)行。
編譯意味著瀏覽器看到的是 HTML(其文件擴(kuò)展名為 .html,內(nèi)容類型為文本/html),它是在請(qǐng)求頁面之前從您的開發(fā)環(huán)境中或服務(wù)器上的 XML 轉(zhuǎn)換而來的。Xalan 和 Saxon 都是著名的 XSLT 處理器。
解釋是未來的發(fā)展方向。所有現(xiàn)代瀏覽器都支持 XSLT,并且它具有一些優(yōu)點(diǎn):
當(dāng)測(cè)試時(shí),您會(huì)立即獲得結(jié)果。只需在您測(cè)試的每個(gè)瀏覽器中按下 F5,即可反映源頁面、CSS 和 XSLT 樣式表的更改。
要傳遞給客戶端的信息量減少了。
客戶端看到的是一個(gè)干凈、整潔的網(wǎng)頁,因?yàn)檫€未生成擴(kuò)充內(nèi)容。
但也要注意一些缺點(diǎn):
有一些舊瀏覽器可能不支持 XSLT。如果向一個(gè)受控的環(huán)境(內(nèi)部網(wǎng))發(fā)布頁面,就不會(huì)出現(xiàn)問題。
一些現(xiàn)代瀏覽器禁止 XSLT 樣式表引用另一個(gè)目錄中的另一個(gè)樣式表。
將 XSLT 域其他功能相結(jié)合(比如 SVG 或 iframe)可能在一些瀏覽器中導(dǎo)致問題。
因?yàn)榇蟛糠譃g覽器都不支持 XSLT 2.0 或即將推出的 3.0,所以您無法使用新功能。沒有 XPath 2.0 if () then … else,也沒有用戶編寫的 XPath 功能。
無論進(jìn)行編譯還是解釋,頁面的其他轉(zhuǎn)換 (CSS、JavaScript) 都會(huì)在 XSLT 轉(zhuǎn)換之后執(zhí)行。
結(jié)束語
在本文中,您學(xué)習(xí)了如何使用 XSLT 樣式表來擴(kuò)充 XHTML 文檔。您可以使用本文中的示例作為起點(diǎn),構(gòu)建您自己的 XSLT 樣式表。
關(guān)于如何將XSLT作為HTML的樣式表的使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。