XSL 指擴(kuò)展樣式表語(yǔ)言(EXtensible Stylesheet Language)
萬(wàn)維網(wǎng)聯(lián)盟開(kāi)始發(fā)展 XSL 的起因是由于對(duì)基于 XML 的樣式表語(yǔ)言的需求。
XSLT 指 XSL 轉(zhuǎn)換。XSLT 將 XML 文檔轉(zhuǎn)換為其他文檔,比如 XHTML
概念不多講,這里附上W3C的網(wǎng)址 ,希望您一定要去看看!
老規(guī)矩,先寫(xiě)出個(gè)能運(yùn)行的程序再說(shuō)。
既然XSLT是將XML文檔轉(zhuǎn)換為其它文檔,那么我們就先建立一個(gè)XML文檔吧。(名為:HelloHtml.xml)
<?xml version="1.0" encoding="utf-8" ?>
<root>
<greeting>Hello Angel</greeting>
</root>
同樣,還要再建立一個(gè)xslt文件,這里把它們放到同一個(gè)目錄下。(名為:HelloHtml.xslt)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="root">
<h1><xsl:value-of select="greeting"/></h1>
</xsl:template>
</xsl:stylesheet>
想來(lái)xml文件應(yīng)該不用講解了,那就看看xslt文件吧:
首先,它也是一個(gè)xml文檔,stylesheet節(jié)點(diǎn)標(biāo)記了此xsl樣式文件的版本,xmlns(xml命名空間)等信息。output標(biāo)記中method聲明以什么形式轉(zhuǎn)換文檔,當(dāng)然,它不僅僅能做html轉(zhuǎn)換,也可以做其它諸如xml,text,pdf等轉(zhuǎn)換。 ident聲明了是否要對(duì)輸出文檔作縮進(jìn)。
template標(biāo)記聲明這是一個(gè)轉(zhuǎn)換模板,match標(biāo)記聲明了它將對(duì)哪個(gè)節(jié)點(diǎn)下的元素進(jìn)行匹配。
value-of標(biāo)記是個(gè)取值指令,它將會(huì)把xml文檔中元素名為select中指定的元素的值取出來(lái)作為轉(zhuǎn)換后的數(shù)據(jù)。
由此分析,經(jīng)轉(zhuǎn)換后輸出的html內(nèi)容應(yīng)該是:
由于xslt為WEB標(biāo)準(zhǔn),并且被大多數(shù)主流瀏覽器所支持,所以?xún)H僅需要將xml文件與xslt文件都發(fā)送到客戶(hù)端,瀏覽器就會(huì)自動(dòng)將其轉(zhuǎn)換為XHTML文檔。
接下來(lái)就是要給xml檔引入xslt樣式表了,這樣xslt才能對(duì)xml文檔進(jìn)行轉(zhuǎn)換,在xml文件的版本聲明后加上這樣一句:
<?xml-stylesheet type="text/xsl" href="/HelloHtml.xslt"?>
此時(shí)再瀏覽xml文件,就會(huì)看到瀏覽器不是僅僅顯示一個(gè)XML的文檔樹(shù)了(有些瀏覽器顯示純xml文檔是純文本格式的),而應(yīng)該是一個(gè)又大又粗的一號(hào)標(biāo)題文本:

但它并不是一個(gè)標(biāo)準(zhǔn)的XHTML文檔,因?yàn)檗D(zhuǎn)換后生成的內(nèi)容僅僅是如下的:
而一個(gè)標(biāo)準(zhǔn)的xhtml文檔至少應(yīng)該是下面:(當(dāng)然,這里是xhtml1.1版本的,DOCTYPE可能會(huì)有所不同)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<h1>Hello Angel</h1>
</body>
</html>
如何才能輸出這樣一個(gè)文檔呢?當(dāng)然,看了上面的例子后,你一定能把除了DOCTYPE之外的其它元素都完整地輸出,但關(guān)鍵就是要輸出DOCTYPE,因?yàn)槿绻粋€(gè)html/xhtml文檔如果沒(méi)有一個(gè)正確的doctype,將可能會(huì)觸發(fā)瀏覽器的怪異模式,這將有可能造成瀏覽器對(duì)內(nèi)容的顯示非常混亂,當(dāng)然,即使是小小的差異,只要是不可預(yù)料的也確實(shí)是件令人頭痛的事情!
其實(shí)output指令還有兩個(gè)屬性,一個(gè)是doctype-public,一個(gè)是doctype-system。正好對(duì)應(yīng)html/xhtml DOCTYPE中的PUBLIC和后面的SYSTEM聲明。
那么我們只用這樣寫(xiě),便可以輸出符合標(biāo)準(zhǔn)的html/xhtml文檔了:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes" doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>
<xsl:template match="root">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Index</title>
</head>
<body>
<h1>
<xsl:value-of select="greeting"/>
</h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
看似一切都搞定了,也沒(méi)有多少東西,但事實(shí)上并不是這樣的。因?yàn)榭赡芪覀兿胍旬a(chǎn)品列表放到一個(gè)文檔中,評(píng)論信息又放入一個(gè)文檔中,然后還要把它們合并成為一個(gè)文檔。大多數(shù)情況下我們是沒(méi)有一個(gè)現(xiàn)成的xml文檔的。那些東西也是要?jiǎng)討B(tài)生成的。我們還可能需要復(fù)雜的選擇運(yùn)算等等。。。
還有就是,本來(lái)網(wǎng)站上使用了點(diǎn)ajax對(duì)SEO就有點(diǎn)不太友好了,再加入xml/xslt這東東,網(wǎng)站的SEO怎么顧全呢?
下接著會(huì)看看多文檔合并的問(wèn)題,接著是解決SEO問(wèn)題。。。總之,會(huì)把如何使用xslt制作符合標(biāo)準(zhǔn)的網(wǎng)站告訴您。而且還要提前告訴您下,雖然接下來(lái)要在服務(wù)器端使用xslt,但我們已經(jīng)可以擺脫WebForm的page以提升性能,再加上所有跟數(shù)據(jù)、樣式、HTML相關(guān)的內(nèi)容都是純文本的,并沒(méi)有絲毫編譯到DLL中去,也將大大方便將來(lái)對(duì)網(wǎng)站的維護(hù)。
本文轉(zhuǎn)載自 http://www.cnblogs.com/javennie/archive/2011/09/27/xsltgreeting.html
posted on 2011-09-28 10:24
日需博客 閱讀(279)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
C# 、
技術(shù)文章 、
轉(zhuǎn)載