msxsl:script标记在xslt中的应用

  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#代码写在里面,省去了编写用户控件的麻烦!

转载于:https://www.cnblogs.com/jaxu/archive/2010/06/29/1767688.html

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值