马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。asp.net 在asp.net2.0中,对XML的使用年夜为加强,而在XSLT处置方面,也供应了新的功效。本文将复杂对asp.net2.0中XSLT的利用作复杂的申明,固然本文假定读者有必定的XSLT的基本常识。
在asp.net2.0中,XSLT方面有以下的变化和新功效:
・XslCompiledTransform-实践上是.NET1.0的XslTransform,但供应了更好的功能撑持,也撑持之前.net1.0下的使用的顺遂迁徙.
・XsltArgumentList-同意向XSLT中传送参数大概工具
XsltCompileException-当经由过程loa()办法加载XSL文档时产生毛病时发生的非常。
XsltException-当在对XSL文档举行剖析时产生毛病时发生的非常。
先来看个复杂的例子,该例子从NORTHWIND数据库中拿出数据,以XML格局展现,再以XSLT格局转换,个中XSLT代码以下:
<?xmlversion="1.0"?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:outputmethod="html"/>
<xsl:templatematch="/">
<HTML>
<HEAD>
<TITLE>SimpleXSLTTransformation</TITLE>
</HEAD>
<BODY>
<H2>SimpleXSLTTransformation</H2>
<tableborder="1"cellSpacing="1"cellPadding="1">
<center>
<xsl:for-eachselect="//Categories">
<!--Eachrecordonaseperaterow-->
<xsl:elementname="tr">
<xsl:elementname="td">
<xsl:value-ofselect="ProductSubcategoryID"/>
</xsl:element>
<xsl:elementname="td">
<xsl:value-ofselect="Name"/>
</xsl:element>
<xsl:elementname="td">
<xsl:attributename="align">center</xsl:attribute>
<xsl:value-ofselect="ModifiedDate"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</center>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
然后其展现的ASPX代码为:
<%@PageLanguage="C#"%>
<%@ImportNamespace="System.Data.SqlClient"%>
<%@ImportNamespace="System.Xml"%>
<%@ImportNamespace="System.Xml.Xsl"%>
<%@ImportNamespace="System.Xml.XPath"%>
<%@ImportNamespace="System.Web.Configuration"%>
<scriptrunat="server">
voidPage_Load(objectsender,System.EventArgse)
{
stringconnString=WebConfigurationManager.ConnectionStrings
["adventureWorks"].ConnectionString;
using(SqlConnectionconnection=newSqlConnection(connString))
{
connection.Open();
SqlCommandcommand=newSqlCommand
("Select*fromProduction.ProductSubcategoryasCategories"+
"forxmlauto,elements",connection);
XmlReaderreader=command.ExecuteXmlReader();
XPathDocumentxpathDoc=newXPathDocument(reader);
stringxslPath=Server.MapPath("Category.xsl");
XslCompiledTransformtransform=newXslCompiledTransform();
transform.Load(xslPath);
transform.Transform(xpathDoc,null,Response.Output);
}
}
</script>
个中注重我们先用xmlreader读取数据库提出来的数据(以xmlauto的体例),然后载进xsl文件,再用xslcompiledtransform类举行转换,个中用xpathdocument是为了功能的提拔。注重这里用xslcompiledtransform代替了.net1.1中的xslttransform,运转了局以下图
还能够向XSLT中传进参数或工具,先看怎样向其传进参数,好比要改动上例的背景色彩,则能够如许写XSLT
<?xmlversion="1.0"?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:outputmethod="html"/>
<xsl:paramname="BackGroundColor"select="Blue"/>
<xsl:templatematch="/">
<HTML>
<HEAD>
<TITLE>PassingParameterstoanXSLTStyleSheet</TITLE>
</HEAD>
<BODY>
<H2>PassingParameterstoanXSLTStyleSheet</H2>
<tableborder="1"cellSpacing="1"cellPadding="1">
<center>
<xsl:for-eachselect="//Categories">
<!--Eachrecordonaseperaterow-->
<xsl:elementname="tr">
<xsl:attributename="bgcolor">
<xsl:value-ofselect="$BackGroundColor"/>
</xsl:attribute>
<xsl:elementname="td">
<xsl:value-ofselect="ProductSubcategoryID"/>
</xsl:element>
<xsl:elementname="td">
<xsl:value-ofselect="Name"/>
</xsl:element>
<xsl:elementname="td">
<xsl:attributename="align">center</xsl:attribute>
<xsl:value-ofselect="ModifiedDate"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</center>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
要注重的是个中的是:
<xsl:attributename="bgcolor">
<xsl:value-ofselect="$BackGroundColor"/>
以如许的情势指定了backgroundcolor是一个参数,而在XSLT的一入手下手,以<xsl:paramname="BackGroundColor"select="Blue"/>的体例,为backgroundcolor设定了一个值为蓝色,如许则为使<tr>的背景色彩bgcolor=blue,完成将输入数据的每行变成蓝色的效果。
<P> 固然,在下面的例子中,我们是已硬编码的体例设置xslt的参数,一样平常来讲,应当在asp.net页面中举行设置。而在asp.net2.0中,可使用XsltArgumentList类来向XSLT中传送参数,详细利用办法以下:
<%@PageLanguage="C#"%>
<%@ImportNamespace="System.Data.SqlClient"%>
<%@ImportNamespace="System.Xml"%>
<%@ImportNamespace="System.Xml.Xsl"%>
<%@ImportNamespace="System.Xml.XPath"%>
<%@ImportNamespace="System.Web.Configuration"%>
<scriptrunat="server">
voidPage_Load(objectsender,System.EventArgse)
{
stringconnString=WebConfigurationManager.ConnectionStrings
["adventureWorks"].ConnectionString;
using(SqlConnectionconnection=newSqlConnection(connString))
{
connection.Open();
SqlCommandcommand=newSqlCommand
("Select*fromProduction.ProductSubCategoryasCategories"+
"forxmlauto,elements",connection);
XmlReaderreader=command.ExecuteXmlReader();
XPathDocumentxpathDoc=newXPathDocument(reader);
stringxslPath=Server.MapPath("App_Data/Category.xsl");
XslCompiledTransformtransform=newXslCompiledTransform();
transform.Load(xslPath);
XsltArgumentListargsList=newXsltArgumentList();
stringbackGroundColor="Tan";
//AddtherequiredparameterstotheXsltArgumentListobject
argsList.AddParam("BackGroundColor","",backGroundColor);
transform.Transform(xpathDoc,argsList,Response.Output);
}
}
个中,注重黑体加粗部分,先实例化了XsltArgumentList类,接着设置了backGroundColor色彩,再利用XsltArgumentList类的addParam办法,向XSLT华夏先设置好的BackGroundColor传送参数。最初,在XslCompiledTransform的transform办法中,个中的第二个参数,传进方才实例化后的argsList,如许就能够完成在aspx页面中静态向XSLT中传送进参数了,完成的效果以下图所示
除此以外,在.net2.0中,还能够在xslt中间接挪用内部的类中的办法。而被XSLT挪用的内部类,我们称为扩大工具。上面举例申明,起首先创建一个类DateTimeConverter,这个类中,我们有一个办法能够将指定的日期举行格局化,以下所示:
usingSystem;
publicclassDateTimeConverter
{
publicDateTimeConverter()
{}
publicstringToDateTimeFormat(stringdata,stringformat)
{
DateTimedate=DateTime.Parse(data);
returndate.ToString(format);
}
}
将这个类放在App_Code这个文件夹下,以便利挪用。为了在XSLT中挪用这个类,起首在XSLT文件的开首用XMLNS的体例指定要挪用的扩大工具,以下代码所示:
<?xmlversion="1.0"?>
<xsl:stylesheetversion="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:DateTimeConverter="urn:DateTimeConverter">
<xsl:outputmethod="html"/>
<xsl:paramname="BackGroundColor"select="Blue"/>
<xsl:templatematch="/">
<HTML>
<HEAD>
<TITLE>InvokingextensionobjectsfromanXSLTStyleSheet</TITLE>
</HEAD>
<BODY>
<H2>InvokingextensionobjectsfromanXSLTStyleSheet</H2>
<tableborder="1"cellSpacing="1"cellPadding="1">
<center>
<xsl:for-eachselect="//Categories">
<!--Eachrecordonaseperaterow-->
<xsl:elementname="tr">
<xsl:attributename="bgcolor">
<xsl:value-ofselect="$BackGroundColor"/>
</xsl:attribute>
<xsl:elementname="td">
<xsl:value-ofselect="ProductSubcategoryID"/>
</xsl:element>
<xsl:elementname="td">
<xsl:value-ofselect="Name"/>
</xsl:element>
<xsl:elementname="td">
<xsl:attributename="align">center</xsl:attribute>
<xsl:value-ofselect="DateTimeConverter:ToDateTimeFormat
(ModifiedDate,F)"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</center>
</table>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
在下面的代码中,我们用<xmlns:DateTimeConverter="urn:DateTimeConverter">的体例,给要被挪用的扩大工具定名为DateTimeConverter,以便利上面的挪用。而为了将日期格局化,经由过程<xsl:value-ofselect="DateTimeConverter:ToDateTimeFormat(ModifiedDate,F)"/>的体例,挪用了内部类DateTimeConverter中的ToDateTimeFormat的办法,注重这里是以类名:办法名(参数表)的情势暗示。
接上去,在aspx页面中,挪用该XSLT的代码以下
<%@PageLanguage="C#"%>
<%@ImportNamespace="System.Data.SqlClient"%>
<%@ImportNamespace="System.Xml"%>
<%@ImportNamespace="System.Xml.Xsl"%>
<%@ImportNamespace="System.Xml.XPath"%>
<%@ImportNamespace="System.Web.Configuration"%>
<scriptrunat="server">
voidPage_Load(objectsender,System.EventArgse)
{
stringconnString=WebConfigurationManager.ConnectionStrings
["adventureWorks"].ConnectionString;
using(SqlConnectionconnection=newSqlConnection(connString))
{
connection.Open();
SqlCommandcommand=newSqlCommand("Select*fromProduction.ProductSubCategoryasCategories"+
"forxmlauto,elements",connection);
XmlReaderreader=command.ExecuteXmlReader();
XPathDocumentxpathDoc=newXPathDocument(reader);
stringxslPath=Server.MapPath("App_Data/Category.xsl");
XslCompiledTransformtransform=newXslCompiledTransform();
transform.Load(xslPath);
XsltArgumentListargsList=newXsltArgumentList();
stringbackGroundColor="Tan";
argsList.AddParam("BackGroundColor","",backGroundColor);
DateTimeConverterconverter=newDateTimeConverter();
argsList.AddExtensionObject("urn:DateTimeConverter",converter);
transform.Transform(xpathDoc,argsList,Response.Output);
}
}
</script>
在下面的代码中,要寄望的是,起首实例化了DateTimeConverter类,然后经由过程XsltArgumentList的AddExtensionObject办法,增添其扩大工具,个中用"urn:DateTimeConverter"的体例,指了然其扩大工具的别号。运转的效果以下图
我觉得很重要,一般所说的不重要应该指的是:你学好一种以后再学另一种就很容易了。(因为这样大家可能有一个错觉就是语言不是很重要,只要随便学一种就可以了,其实不是这样的。 |