技术开发 频道

ASP.NET 2.0中XSLT的使用


【IT168技术文档】

  在asp.net 2.0中,对XML的应用大为增强,而在XSLT处理方面,也提供了新的功能。本文将简单对asp.net 2.0中XSLT的使用作简单的说明,当然本文假定读者有一定的XSLT的基础知识。

  在asp.net 2.0中,XSLT方面有如下的转变和新功能:

  ·XslCompiledTransform - 实际上是.NET 1.0的 XslTransform ,但提供了更好的性能支持,也支持之前.net 1.0下的应用的顺利迁移.

  ·XsltArgumentList - 允许向XSLT中传递参数或者对象

  XsltCompileException - 当通过loa()方法加载XSL文档时发生错误时产生的异常。

  XsltException - 当在对XSL文档进行解析时发生错误时产生的异常。

  先来看个简单的例子,该例子从NORTHWIND数据库中拿出数据,以XML格式展示,再以XSLT格式转换,其中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>  <TITLE>Simple XSLT Transformation</TITLE> </HEAD> <BODY>  <H2>Simple XSLT Transformation</H2>  <table border="1" cellSpacing="1" cellPadding="1">   <center>   <xsl:for-each select="//Categories">   <!-- Each record on a seperate row -->   <xsl:element name="tr">    <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>
  然后其展示的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读取数据库提出来的数据(以xml auto的方式),然后载入xsl文件,再用xslcompiledtransform类进行转换,其中用xpathdocument是为了性能的提升。注意这里用xslcompiledtransform取代了.net 1.1中的xslttransform。
  还可以向XSLT中传入参数或对象,先看如何向其传入参数,比如要改变上例的背景颜色,则可以这样写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="//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>
0
相关文章