关键字:XML、页、Page、XSLT

出自:http://c.cxc.cc/0/4/2003-05/20030516134253.html

摘要:ASP.NET由于新引入了服务器控制(server control),所以实现上述的技术明显要更加容易和灵活。控制功能作为占位符直接插入到原来的XML文档的内容中形成了ASP.NET页。你可以控制逐字显示XML文档的内容或者显示XSLT转换的结果。

许多ASP应用程序把它们的输出数据保存到一个或者多个XML文件中。XSLT文档把与浏览器无关的XML文件内容转换为与特定浏览器相关的HTML。这个转换过程一般用VBScript或者Jscrip代码完成,转化结果一般添加到输出流中。

ASP.NET由于新引入了<asp:xml>服务器控制(server control),所以实现上述的技术明显要更加容易和灵活。控制功能作为占位符直接插入到原来的XML文档的内容中形成了ASP.NET页。你可以控制逐字显示XML文档的内容或者显示XSLT转换的结果。
<asp:xml>控制

在.NET中,XslTransform类可以执行XSLT转换的功能。它接收源文件和样式表(style sheet)并返回XML或者HTML形式的结果。下面摘录的代码大致给出了使用这个类进行XSLT转化的过程:

XslTransform xslt = new XslTransform();

xslt.Load(stylesheet);

xslt.Transform(source, output);

<asp:xml>控制的操作方法和XslTransform类很相似,并且<asp:xml>控制在其内部使用XslTransform类。当你需要在Web页中嵌入XML文档时,你可以使用<asp:xml>控制。例如,当你需要创建可供客户端使用的XML数据岛(XML data islands)时,该控制就显得极为方便。下面摘录的代码演示了把服务器控制输出嵌入到客户<xml>标签中,这样Internet Explorer将会把它解释为XML数据岛。在这种情况下,XML源可以写成内联的形式:

<xml id="theXml">

<asp:xml runat="server">

... xml data ...

</asp.xml>

</xml>

你可以使用外部文件、字符串、甚至.NET XML文档对象模型的事件。

你可以通过文件或者预配置的XslTransform对象来确定样式表。转换的输出到Web页的输出流中。表A给出了<asp:xml>控制的功能(properties)。

表A

功能 说明

Document 用XmlDocument获得或者设置XML源文档。

DocumentContent 用字符串获得或者设置XML文档。

DocumentSource 用文件获得或者设置XML文档。

Transform 获得或者设置转换用的XslTransform类。

TransformSource 获得或者设置转换用的样式表。

TransformArgumentList 获得或者设置转换用到的参数表。

控制的功能

文档与转换的设置是互斥的,最后一次设置值有效。例如,如果你同时设置Document和DocumentSource,不会抛出例外,但是第一次赋值被覆盖了。

使用控制

程序清单A演示了如何设置一个用样式表文档实现的从XML到HTML的转换。

<asp:xml>控制可以有一个ID号,代码可以通过ID来访问它。例如,你可以检查浏览器的性能并动态判断出使用哪一种样式表的效果最好。

你还可以完全用XML文档来描述整个页面并用样式表把XML文档转换到HTML。不过,出于灵活性的考虑,这种方案不是最优的,而且它构造的模块也很难扩展。但是<asp:xml>控制却使这种解决方案得到了相当的简化:

<asp:xml runat="server" id="theXml"

DocumentSource="Employees.xml"

TransformSource="EmpInfo.xsl" />

如果你需要传递参数,你只需建立并例化XsltArgumentList类的对象并用TransformArgumentList功能把它传递给控制。

XsltArgumentList args = new XsltArgumentList();

DateTime today = DateTime.Now;

args.AddParam("orderdate", "", d.ToString());

theXml.TransformArgumentList = args;


代码清单B中的ASP.NET页包含了一个用到了<asp:xml>控制的XML数据岛,这个页面还有一些VBScript代码用来接收和显示数据岛的内容。

下面的例子演示了如何进行多浏览器编程。XML控制绑定到某个特定文件上,但是还没有声明进行演示转换的样式表:

<asp:xml runat="server" id="theXml"

DocumentSource="Employees.xml" />

在运行时,主页面(host page)调用浏览器并启动最适合该浏览器的转换:

theXml.TransformSource = "standard.xsl";

if (Request.Browser.Type ToUpper() == "IE5")

theXml.TransformSource = "ie.xsl";

结论

在ASP.NET中,你可以用<asp:xml>服务器控制来完成ASP应用程序中的一个通用任务——把某些普通的XML文档转换为符合特定浏览器的代码。<asp:xml>控制以占位符的形式出现在XML文档(也可能还有样式表)产生的XML或者HTML文档中。<asp:xml>控制的编程接口非常接近.NET中专门用来XSL转换的类——即XslTransform。


Listing A

<asp:xml runat="server" TransformSource="EmpInfo.xsl">
<MyDataSet>
<NorthwindEmployees>
<Employee>
<employeeid>1</employeeid>
<firstname>Nancy</firstname>
<lastname>Davolio</lastname>
<title>Sales Representative</title>
<notes>...</notes>
</Employee>
</NorthwindEmployees>
</MyDataSet>
</asp:xml>


Listing B

<script runat="server">


<form runat="server">
<asp:button runat="server" id="button" text="Click..." />
</form>

</body>
</html>
posted on 2005-09-22 21:52  VortexDragon(旋风龙)  阅读(256)  评论(0编辑  收藏  举报