在asp.net 2.0中,XSLT方面有如下的轉(zhuǎn)變和新功能:
·XslCompiledTransform - 實際上是.NET 1.0的 XslTransform ,但提供了更好的性能支持,也支持之前.net 1.0下的應用的順利遷移.
·XsltArgumentList - 允許向XSLT中傳遞參數(shù)或者對象
XsltCompileException - 當通過loa()方法加載XSL文檔時發(fā)生錯誤時產(chǎn)生的異常。
XsltException - 當在對XSL文檔進行解析時發(fā)生錯誤時產(chǎn)生的異常。
先來看個簡單的例子,該例子從NORTHWIND數(shù)據(jù)庫中拿出數(shù)據(jù),以XML格式展示,再以XSLT格式轉(zhuǎn)換,其中XSLT代碼如下:
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:template match="/"> <HTML> <HEAD> 。糡ITLE>Simple XSLT Transformation</TITLE> </HEAD> <BODY> <H2>Simple XSLT Transformation</H2> 。紅able border="1" cellSpacing="1" cellPadding="1"> 。糲enter> 。紉sl:for-each select="http://Categories"> 。!-- Each record on a seperate row --> 。紉sl:element name="tr"> 。紉sl:element name="td"> 。紉sl:value-of select="ProductSubcategoryID" /> 。/xsl:element> 。紉sl:element name="td"> <xsl:value-of select="Name" /> 。/xsl:element> <xsl:element name="td"> 。紉sl:attribute name="align">center</xsl:attribute> <xsl:value-of select="ModifiedDate" /> 。/xsl:element> 。/xsl:element> </xsl:for-each> 。/center> </table> </BODY> </HTML> </xsl:template> </xsl:stylesheet> |
然后其展示的ASPX代碼為:
<%@ Page Language="C#" %> <%@ Import Namespace="System.Data.SqlClient" %> <%@ Import Namespace="System.Xml" %> <%@ Import Namespace="System.Xml.Xsl" %> <%@ Import Namespace="System.Xml.XPath" %> <%@ Import Namespace="System.Web.Configuration" %> <script runat="server"> void Page_Load(object sender, System.EventArgs e) { string connString = WebConfigurationManager.ConnectionStrings ["adventureWorks"].ConnectionString; using (SqlConnection connection = new SqlConnection(connString)) { connection.Open(); SqlCommand command = new SqlCommand ("Select * from Production.ProductSubcategory as Categories " + " for xml auto,elements", connection); XmlReader reader = command.ExecuteXmlReader(); XPathDocument xpathDoc = new XPathDocument(reader); string xslPath = Server.MapPath("Category.xsl"); XslCompiledTransform transform = new XslCompiledTransform(); transform.Load(xslPath); transform.Transform(xpathDoc, null, Response.Output); } } </script> |
其中注意我們先用xmlreader讀取數(shù)據(jù)庫提出來的數(shù)據(jù)(以xml auto的方式),然后載入xsl文件,再用xslcompiledtransform類進行轉(zhuǎn)換,其中用xpathdocument是為了性能的提升。注意這里用xslcompiledtransform取代了.net 1.1中的xslttransform。
還可以向XSLT中傳入?yún)?shù)或?qū)ο,先看如何向其傳入(yún)?shù),比如要改變上例的背景顏色,則可以這樣寫XSLT
<?xml version="1.0" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" /> <xsl:param name="BackGroundColor" select="Blue" /> <xsl:template match="/"> <HTML> <HEAD> <TITLE>Passing Parameters to an XSLT Style Sheet</TITLE> </HEAD> <BODY> <H2> Passing Parameters to an XSLT Style Sheet</H2> <table border="1" cellSpacing="1" cellPadding="1"> <center> <xsl:for-each select="http://Categories"> <!-- Each record on a seperate row --> <xsl:element name="tr"> <xsl:attribute name="bgcolor"> <xsl:value-of select="$BackGroundColor" /> </xsl:attribute> <xsl:element name="td"> <xsl:value-of select="ProductSubcategoryID" /> </xsl:element> <xsl:element name="td"> <xsl:value-of select="Name" /> </xsl:element> <xsl:element name="td"> <xsl:attribute name="align">center</xsl:attribute> <xsl:value-of select="ModifiedDate" /> </xsl:element> </xsl:element> </xsl:for-each> </center> </table> </BODY> </HTML> </xsl:template> </xsl:stylesheet> |
要注意的是其中的是:
<xsl:attribute name="bgcolor"> <xsl:value-of select="$BackGroundColor" /> |
以這樣的形式指定了backgroundcolor是一個參數(shù),而在XSLT的一開始,以<xsl:param name="BackGroundColor" select="Blue" />的方式,為backgroundcolor設定了一個值為藍色,這樣則為使<tr>的背景顏色bgcolor=blue,實現(xiàn)將輸出數(shù)據(jù)的每一行變?yōu)樗{色的效果。