script标记在xslt中的应用

http://msdn.microsoft.com/en-us/library/533texsx(VS.71).aspx#Y1338: 查看应用

 xslt被应用在对xml文件的解析,在asp.net编程使用xml控件可以指定DocumentSource属性以加载xml文件,指定TransformSource属性以加载xslt文件,xml控件会自动将转换后的结果显示在页面上。xslt本身也支持很多xpath函数,以及一些简单的逻辑语句,如if,choose-when-otherwise,for-each等,另外在xslt也可以自定义方法(在xslt称之为模板)被其它的代码重复调用,有关xslt的详细介绍可以参考W3school的XSLT教程

  自从微软的MOSS出现以来,xslt的应用越来越广泛,有时候我们也会碰到xslt与javascript以及一些服务器端语言之间的交互问题,如我们需要根据javascript代码某一变量的值来决定是否在页面上输出内容,这个时候就需要在xslt使用msxsl:script标记了。

  msxsl:script标记由Microsoft支持,它本身可以支持几种不同的语言,如C#,VB.NET,JScript等,具体的使用方法和介绍可以参考下msdn,http://msdn.microsoft.com/en-us/library/533texsx(VS.71).aspx。另外,这里还有一篇文章也详细介绍了如何在xslt使用msxsl:script标记,http://blog.joycode.com/saucer/archive/2004/05/12/21273.joy

  基本上,我们在xslt可以直接使用msxsl:script标记定义好的公共方法和类型,如果是服务器端语言,必须确保方法或类型是public的,而且参数或返回值的类型在传递和接收时必须相同(有些参数类型在xslt是不被支持的,大多数情况下我们可能会使用到nodelist类型)。当然,在使用服务器端语言时,程序集和名称空间的引用也是必要的,这里有一个例子:

<msxsl:script language=" C#" implements-prefix="user">
<msxsl:using namespace="System.Web" />
<msxsl:assembly name="System.Web" />
public bool matchCurrUrl(string loc)
{
return HttpContext.Current.Request.Url.ToString().ToLower().IndexOf(loc.ToLower()) != -1;
}
</msxsl:script>

  msxsl:using标记和msxsl:assembly标记分别用来引用名称空间和程序集,理论上它们是可以被写在xslt文件的任何位置的。msxsl:script标记被标识为C#语言,而且matchCurrUrl方法使用了HttpContext全局对象,该对象隶属于System.Web名称空间,因此在使用前必须添加程序集引用和名称空间。不要指望xslt会自动为你加载程序集和名称空间引用,因为msxsl:script标记并非w3c标准,你在使用它之前也要进行申明,如下面两行:

xmlns:msxsl="urn:schemas-microsoft-com: xslt"
xmlns:user="urn:my-scripts"

  如果在msxsl:script标记使用的是客户端语言,如javascript,则要注意避免使用客户端浏览器对象,如window、document等,因为xslt本身是在服务器端解析的,服务器并不知道客户端的行为,我们在msxsl:script标记编写的javascript代码应该会被映射成服务器端方法才能被正确解析。如果你想在交互过程得到客户端访问的页面地址,最好的方法莫过于在C#使用HttpContext.Current.Request.Url,而不要在javascript使用document.location或window.location。

  使用msxsl:script标记可以省去开发过程的很多麻烦,按照传统的开发习惯,如果我们想在xslt插入C#代码,则一般的做法是将代码写在用户控件,然后在xslt输出用户控件的引用标记。如果直接使用msxsl:script标记,你可以将所有的C#代码写在里面,省去了编写用户控件的麻烦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值