XSL 指擴展樣式表語言(EXtensible Stylesheet Language)
萬維網聯盟開始發展 XSL 的起因是由于對基于 XML 的樣式表語言的需求。
XSLT 指 XSL 轉換。XSLT 將 XML 文檔轉換為其他文檔,比如 XHTML
概念不多講,這里附上W3C的網址 ,希望您一定要去看看!
老規矩,先寫出個能運行的程序再說。
既然XSLT是將XML文檔轉換為其它文檔,那么我們就先建立一個XML文檔吧。(名為:HelloHtml.xml)
<?xml version="1.0" encoding="utf-8" ?>
<root>
<greeting>Hello Angel</greeting>
</root>
同樣,還要再建立一個xslt文件,這里把它們放到同一個目錄下。(名為: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>
想來xml文件應該不用講解了,那就看看xslt文件吧:
首先,它也是一個xml文檔,stylesheet節點標記了此xsl樣式文件的版本,xmlns(xml命名空間)等信息。output標記中method聲明以什么形式轉換文檔,當然,它不僅僅能做html轉換,也可以做其它諸如xml,text,pdf等轉換。 ident聲明了是否要對輸出文檔作縮進。
template標記聲明這是一個轉換模板,match標記聲明了它將對哪個節點下的元素進行匹配。
value-of標記是個取值指令,它將會把xml文檔中元素名為select中指定的元素的值取出來作為轉換后的數據。
由此分析,經轉換后輸出的html內容應該是:
由于xslt為WEB標準,并且被大多數主流瀏覽器所支持,所以僅僅需要將xml文件與xslt文件都發送到客戶端,瀏覽器就會自動將其轉換為XHTML文檔。
接下來就是要給xml檔引入xslt樣式表了,這樣xslt才能對xml文檔進行轉換,在xml文件的版本聲明后加上這樣一句:
<?xml-stylesheet type="text/xsl" href="/HelloHtml.xslt"?>
此時再瀏覽xml文件,就會看到瀏覽器不是僅僅顯示一個XML的文檔樹了(有些瀏覽器顯示純xml文檔是純文本格式的),而應該是一個又大又粗的一號標題文本:

但它并不是一個標準的XHTML文檔,因為轉換后生成的內容僅僅是如下的:
而一個標準的xhtml文檔至少應該是下面:(當然,這里是xhtml1.1版本的,DOCTYPE可能會有所不同)
<!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>
如何才能輸出這樣一個文檔呢?當然,看了上面的例子后,你一定能把除了DOCTYPE之外的其它元素都完整地輸出,但關鍵就是要輸出DOCTYPE,因為如果一個html/xhtml文檔如果沒有一個正確的doctype,將可能會觸發瀏覽器的怪異模式,這將有可能造成瀏覽器對內容的顯示非?;靵y,當然,即使是小小的差異,只要是不可預料的也確實是件令人頭痛的事情!
其實output指令還有兩個屬性,一個是doctype-public,一個是doctype-system。正好對應html/xhtml DOCTYPE中的PUBLIC和后面的SYSTEM聲明。
那么我們只用這樣寫,便可以輸出符合標準的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>
看似一切都搞定了,也沒有多少東西,但事實上并不是這樣的。因為可能我們想要把產品列表放到一個文檔中,評論信息又放入一個文檔中,然后還要把它們合并成為一個文檔。大多數情況下我們是沒有一個現成的xml文檔的。那些東西也是要動態生成的。我們還可能需要復雜的選擇運算等等。。。
還有就是,本來網站上使用了點ajax對SEO就有點不太友好了,再加入xml/xslt這東東,網站的SEO怎么顧全呢?
下接著會看看多文檔合并的問題,接著是解決SEO問題。。??傊?,會把如何使用xslt制作符合標準的網站告訴您。而且還要提前告訴您下,雖然接下來要在服務器端使用xslt,但我們已經可以擺脫WebForm的page以提升性能,再加上所有跟數據、樣式、HTML相關的內容都是純文本的,并沒有絲毫編譯到DLL中去,也將大大方便將來對網站的維護。
本文轉載自 http://www.cnblogs.com/javennie/archive/2011/09/27/xsltgreeting.html
posted on 2011-09-28 10:24
日需博客 閱讀(276)
評論(0) 編輯 收藏 引用 所屬分類:
C# 、
技術文章 、
轉載