熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

ASP.NET 2.0中XSLT的使用

2013-11-15 12:48:07  來源: ASP編程 

  在 對XML的應用大為增強而在XSLT處理方面也提供了新的功能本文將簡單對 中XSLT的使用作簡單的說明當然本文假定讀者有一定的XSLT的基礎知識

  在 XSLT方面有如下的轉變和新功能

  XslCompiledTransform 實際上是NET 的 XslTransform 但提供了更好的性能支持也支持之前net 下的應用的順利遷移

  XsltArgumentList 允許向XSLT中傳遞參數或者對象

  XsltCompileException 當通過loa()方法加載XSL文檔時發生錯誤時產生的異常

  XsltException 當在對XSL文檔進行解析時發生錯誤時產生的異常

  先來看個簡單的例子該例子從NORTHWIND數據庫中拿出數據以XML格式展示再以XSLT格式轉換其中XSLT代碼如下
    

    <?xml version= ?>
<xsl:stylesheet version= xmlns:xsl=
<xsl:output method=html />
<xsl:template match=/
<HTML>
<HEAD>
 <TITLE>Simple XSLT Transformation</TITLE>
</HEAD>
<BODY>
 <H>Simple XSLT Transformation</H
 <table border= cellSpacing= cellPadding=
  <center>
  <xsl:foreach select=//Categories
  <! Each record on a seperate row
  <xsl:element name=tr
   <xsl:element name=td
    <xsl:valueof select=ProductSubcategoryID />
   </xsl:element>
  <xsl:element name=td
 <xsl:valueof select=Name />
 </xsl:element>
 <xsl:element name=td
 <xsl:attribute name=align>center</xsl:attribute>
 <xsl:valueof select=ModifiedDate />
 </xsl:element>
 </xsl:element>
 </xsl:foreach>
 </center>
 </table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

  然後其展示的ASPX代碼為
    

    <%@ Page Language=C# %>
<%@ Import Namespace=SystemDataSqlClient %>
<%@ Import Namespace=SystemXml %>
<%@ Import Namespace=SystemXmlXsl %>
<%@ Import Namespace=SystemXmlXPath %>
<%@ Import Namespace=SystemWebConfiguration %>
<script runat=server
void Page_Load(object sender SystemEventArgs e)
{
 string connString = WebConfigurationManagerConnectionStrings
[adventureWorks]ConnectionString;
 using (SqlConnection connection = new SqlConnection(connString))
 {
  connectionOpen();
  SqlCommand command = new SqlCommand
(Select * from ProductionProductSubcategory as Categories +
for xml autoelements connection);
  XmlReader reader = commandExecuteXmlReader();
  XPathDocument xpathDoc = new XPathDocument(reader);
  string xslPath = ServerMapPath(Categoryxsl);
  XslCompiledTransform transform = new XslCompiledTransform();
  transformLoad(xslPath);
  transformTransform(xpathDoc null ResponseOutput);
 }
}
</script>

  其中注意我們先用xmlreader讀取數據庫提出來的數據(以xml auto的方式)然後載入xsl文件再用xslcompiledtransform類進行轉換其中用xpathdocument是為了性能的提升注意這裡用xslcompiledtransform取代了net 中的xslttransform還可以向XSLT中傳入參數或對象先看如何向其傳入參數比如要改變上例的背景顏色則可以這樣寫XSLT
     <?xml version= ?>
<xsl:stylesheet version= xmlns:xsl=
<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>
<H> Passing Parameters to an XSLT Style Sheet</H
<table border= cellSpacing= cellPadding=
<center>
<xsl:foreach select=//Categories
<! Each record on a seperate row
<xsl:element name=tr
<xsl:attribute name=bgcolor
<xsl:valueof select=$BackGroundColor />
</xsl:attribute>
<xsl:element name=td
<xsl:valueof select=ProductSubcategoryID />
</xsl:element>
<xsl:element name=td
<xsl:valueof select=Name />
</xsl:element>
<xsl:element name=td
<xsl:attribute name=align>center</xsl:attribute>
<xsl:valueof select=ModifiedDate />
</xsl:element>
</xsl:element>
</xsl:foreach>
</center>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

  要注意的是其中的是
     <xsl:attribute name=bgcolor
<xsl:valueof select=$BackGroundColor />

  以這樣的形式指定了backgroundcolor是一個參數而在XSLT的一開始以<xslparam name=BackGroundColor select=Blue />的方式為backgroundcolor設定了一個值為藍色這樣則為使<tr>的背景顏色bgcolor=blue實現將輸出數據的每一行變為藍色的效果

  當然在上面的例子中我們是已硬編碼的方式設置xslt的參數一般來說應該在 頁面中進行設置而在 可以使用XsltArgumentList類來向XSLT中傳遞參數具體使用方法如下
    <%@ Page Language=C# %>
<%@ Import Namespace=SystemDataSqlClient %>
<%@ Import Namespace=SystemXml %>
<%@ Import Namespace=SystemXmlXsl %>
<%@ Import Namespace=SystemXmlXPath %>
<%@ Import Namespace=SystemWebConfiguration %>
<script runat=server
void Page_Load(object sender SystemEventArgs e)
{
 string connString = WebConfigurationManagerConnectionStrings
[adventureWorks]ConnectionString;
 using (SqlConnection connection = new SqlConnection(connString))
 {
  connectionOpen();
  SqlCommand command = new SqlCommand
(Select * from ProductionProductSubCategory as Categories +
for xml autoelements connection);
  XmlReader reader = commandExecuteXmlReader();
  XPathDocument xpathDoc = new XPathDocument(reader);
  string xslPath = ServerMapPath(App_Data/Categoryxsl);
  XslCompiledTransform transform = new XslCompiledTransform();
  transformLoad(xslPath);
  XsltArgumentList argsList = new XsltArgumentList();
  string backGroundColor = Tan;
  //Add the required parameters to the XsltArgumentList object
  argsListAddParam(BackGroundColor backGroundColor);
  transformTransform(xpathDoc argsList ResponseOutput);
 }
}    其中注意黑體加粗部分先實例化了XsltArgumentList類接著設置了backGroundColor顏色再使用 XsltArgumentList類的addParam方法向XSLT中原先設置好的BackGroundColor傳遞參數最後在 XslCompiledTransform的transform方法中其中的第二個參數傳入剛才實例化後的argsList這樣就可以實現在 aspx頁面中動態向XSLT中傳遞進參數了

  除此之外net 還可以在xslt中直接調用外部的類中的方法而被XSLT調用的外部類我們稱為擴展對象下面舉例說明首先先建立一個類DateTimeConverter這個類中我們有一個方法可以將指定的日期進行格式化如下所示
    using System;
public class DateTimeConverter
{
 public DateTimeConverter()
 {}
 public string ToDateTimeFormat(string data string format)
 {
  DateTime date = DateTimeParse(data);
  return dateToString(format);
 }
}

  將這個類放在App_Code這個文件夾下以方便調用為了在XSLT中調用這個類首先在XSLT文件的開頭用XMLNS的方式指定要調用的擴展對象如下代碼所示
    <?xml version= ?>
<xsl:stylesheet version=
xmlns:xsl=
xmlns:DateTimeConverter=urn:DateTimeConverter
<xsl:output method=html />
<xsl:param name=BackGroundColor select=Blue />
<xsl:template match=/
<HTML>
<HEAD>
<TITLE>Invoking extension objects from an XSLT Style Sheet</TITLE>
</HEAD>
<BODY>
<H>Invoking extension objects from an XSLT Style Sheet</H
<table border= cellSpacing= cellPadding=
<center>
<xsl:foreach select=//Categories
<! Each record on a seperate row
<xsl:element name=tr
<xsl:attribute name=bgcolor
<xsl:valueof select=$BackGroundColor />
</xsl:attribute>
<xsl:element name=td
<xsl:valueof select=ProductSubcategoryID />
</xsl:element>
<xsl:element name=td
<xsl:valueof select=Name />
</xsl:element>
<xsl:element name=td
<xsl:attribute name=align>center</xsl:attribute>
<xsl:valueof select=DateTimeConverter:ToDateTimeFormat
(ModifiedDate F) />
</xsl:element>
</xsl:element>
</xsl:foreach>
</center>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

  在上面的代碼中我們用<xmlnsDateTimeConverter=urnDateTimeConverter>的方式給要被調用的擴展對象命名為DateTimeConverter以方便下面的調用而為了將日期格式化通過<xslvalueof select=DateTimeConverterToDateTimeFormat (ModifiedDate F />的方式調用了外部類DateTimeConverter中的ToDateTimeFormat的方法注意這裡是以類名方法名(參數表)的形式表示

  接下來在aspx頁面中調用該XSLT的代碼如下

   <%@ Page Language=C# %>
<%@ Import Namespace=SystemDataSqlClient %>
<%@ Import Namespace=SystemXml %>
<%@ Import Namespace=SystemXmlXsl %>
<%@ Import Namespace=SystemXmlXPath %>
<%@ Import Namespace=SystemWebConfiguration %>
<script runat=server
void Page_Load(object sender SystemEventArgs e)
{
 string connString = WebConfigurationManagerConnectionStrings
[adventureWorks]ConnectionString;
 using (SqlConnection connection = new SqlConnection(connString))
 {
  connectionOpen();
  SqlCommand command = new SqlCommand(Select * from ProductionProductSubCategory as Categories +
for xml autoelements connection);
  XmlReader reader = commandExecuteXmlReader();
  XPathDocument xpathDoc = new XPathDocument(reader);
  string xslPath = ServerMapPath(App_Data/Categoryxsl);
  XslCompiledTransform transform = new XslCompiledTransform();
  transformLoad(xslPath);
  XsltArgumentList argsList = new XsltArgumentList();
  string backGroundColor = Tan;
  argsListAddParam(BackGroundColor backGroundColor);
  DateTimeConverter converter = new DateTimeConverter();
  argsListAddExtensionObject(urn:DateTimeConverter converter);
  transformTransform(xpathDoc argsList ResponseOutput);
 }
}
</script>

  在上面的代碼中要留意的是首先實例化了DateTimeConverter類然後通過XsltArgumentList的 AddExtensionObject方法增加其擴展對象其中用urnDateTimeConverter的方式指明了其擴展對象的別名


From:http://tw.wingwit.com/Article/program/ASP/201311/21660.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.