当前位置: 首页 > news >正文

建设一个网站的流程./上海seo网站策划

建设一个网站的流程.,上海seo网站策划,南宁seo网站推广服务,路飞 wordpress来源:在.NET里用XSLT时怎么使用msxsl:script (思归呓语) 今天在CSDN论坛上看到一个网友在请教关于msxsl:script的用法。感觉这问题也许有点意思,所以在下面简述一下。 在MSXML里,你在msxsl:script里可以使用Javascript…

来源:在.NET里用XSLT时怎么使用msxsl:script (思归呓语

今天在CSDN论坛上看到一个网友在请教关于msxsl:script的用法。感觉这问题也许有点意思,所以在下面简述一下。

在MSXML里,你在msxsl:script里可以使用Javascript和VBScript,参考

<msxsl:script> Element

但在.NET里,你只能使用那些.NET支持的语言,包括C#,VB.NET,JScript等。

譬如,我们想在XSLT里计算下面这个XML里people的和,

<root>
  <people>1</people>
  <people>2</people>
  <people>3</people>
  <people>4</people>
</root>


我们可以使用象这样的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />

<xsl:template match="/">
   sum:<xsl:value-of select="sum(root/people)"/>
</xsl:template>

</xsl:stylesheet>

在MSXML和浏览器里,我们也可以这么做,

<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="anything here">

<xsl:output method="text" />

<msxsl:script language="JavaScript" implements-prefix="user">
<![CDATA[
   function sum(nodelist)
   {
      var d = 0;
      var node = nodelist.nextNode();
      while (node != null)
      {
  d += parseInt(node.text);
  node = nodelist.nextNode();
      }

      return d;
   }
]]>
</msxsl:script>

<xsl:template match="/">
  sum:<xsl:value-of select="user:sum(root/people)"/>
</xsl:template>

</xsl:stylesheet>

但如果你在.NET下使用上述XSLT的话,你就会得到下列错误:

Unhandled Exception: System.Xml.Xsl.XsltException: Function 'user:sum()' has failed. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.JScript.JScriptException: Function expected
Function expected
   at Microsoft.JScript.LateBinding.Call(Binder binder, Object[] arguments, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters, Boolean construct, Boolean brackets, VsaEngine engine)
   at Microsoft.JScript.LateBinding.Call(Object[] arguments, Boolean construct,Boolean brackets, VsaEngine engine)
   at Microsoft.Xslt.CompiledScripts.JScript.ScriptClass_1.sum(Object nodelist)
....

为什么?因为在MSXML里,nodelist这个nodeset参数是个IXMLDOMNodeList实例,其nextNode方法返回一个IXMLDOMNode实例。

而.NET则把这个nodeset参数映射到了System.Xml.XPath.XPathNodeIterator或其子类的实例(至于其他的Mapping,请参考XSLT Stylesheet Scripting using <msxsl:script>或后面提到的Aaron Skonnard的文章)。实际上,如果你运行上述转换的话,你看到的是XPathQueryIterator类。但不管如何,在.NET下,你只能使用.NET下的类,而不能使用那些跟MSXML有关的类/方法,譬如

<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="anything here"
>

<xsl:output method="text" />

<msxsl:script language="Javascript" implements-prefix="user">
function getType(nxpni)
{
  return nxpni.GetType().Name;
}

function sum(nxpni)
{
  var d = 0;
  while (nxpni.MoveNext())
 d += Convert.ToInt32(nxpni.Current.Value);

   return d;
}
</msxsl:script>


<xsl:template match="/">
   type:<xsl:value-of select="user:getType(.)"/>
   sum:<xsl:value-of select="user:sum(root/people)"/>
</xsl:template>

</xsl:stylesheet>

当然你也可使用C#

<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="anything here"
>

<xsl:output method="text" />

<msxsl:script language="C#" implements-prefix="user">
string getType(XPathNodeIterator nxpni)
{
  return nxpni.GetType().Name;
}

int sum(XPathNodeIterator nxpni)
{
  int d = 0;
  while (nxpni.MoveNext())
 d += Convert.ToInt32(nxpni.Current.Value);

   return d;
}
</msxsl:script>


<xsl:template match="/">
   type:<xsl:value-of select="user:getType(.)"/>
   sum:<xsl:value-of select="user:sum(root/people)"/>
</xsl:template>

</xsl:stylesheet>

Aaron Skonnard在MSDN杂志上的专栏《The XML Files 》里对此曾有专述

Extending XSLT with JScript, C#, and Visual Basic .NET

如果你想在XSLT里使用.NET下的扩展函数的话,参考微软Dare Obasanjo在MSDN上的Extreme XML专栏

EXSLT Meets XPath

转载于:https://www.cnblogs.com/Daview/archive/2004/05/18/10105.html

http://www.jmfq.cn/news/5032477.html

相关文章:

  • 2017网站开发发展前景/优化网站排名需要多少钱
  • 做pc端网站一般多少钱/西安网站关键词优化推荐
  • 网站建设 广州/广西壮族自治区在线seo关键词排名优化
  • seo点击软件哪个好用/深圳推广优化公司
  • 绍兴做网站的/重大新闻事件2023
  • 我想注册网站怎么做/搜索引擎关键词的工具
  • 网站开启gzip/口碑营销成功案例
  • 网站建设如果登录失败/渠道营销推广方案
  • 网站建设算固定资产吗/新乡seo网络推广费用
  • 义乌网站建设/线上职业技能培训平台
  • 模板建网站怎么做seo/百度指数移动版
  • 网游开发软件/搜索引擎营销优化的方法
  • 平谷重庆网站建设/百度识图查图片
  • 做房地产用什么网站好/优化设计单元测试卷
  • 南京做机床的公司网站/怎么注册网站免费的
  • 梁朝伟做汤唯视频网站/营销传播
  • 网站开发需要学什么语言/高端定制网站建设
  • 网站建设增值税税率是多少钱/百度seo软件曝光行者seo
  • 重庆找网站推广/如何设计网站步骤
  • 影视传媒广告公司网站模板/网络优化论文
  • wordpress 香港繁体/seo人员是什么意思
  • 青岛专业做商业房的网站/最新国际新闻10条
  • 网站制作关键/外贸业务推广
  • 宁德工程建设监督网站/新闻头条今日要闻国内新闻最新
  • 如何用手机建设网站/网站建设公司哪家好?
  • 网站被挂马做js跳转/百度上怎么免费开店
  • 中小企业建网站/百度搜索链接入口
  • 政府网站建设先进经验交流材料/seo运营
  • 提供手机网站制作/一键免费创建论坛网站
  • 济南网站建设阝力荐聚搜网/抖音广告投放代理商