【问题标题】:msxsl:script language="JScript" - process tree fragment?msxsl:script language="JScript" - 进程树片段?
【发布时间】:2014-12-19 00:46:06
【问题描述】:

假设我有这样的 XML 树:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <item>
        <val>10,1</val>
    </item>
    <item>
        <val>20,2</val>
    </item>
    <item>
        <val>30,3</val>
    </item>
</root>

如何在用 JScript 编写的 msxsl:script 函数中选择树元素? 像这样:

<msxsl:script language="JScript" implements-prefix="baator">
<![CDATA[
    function test(N) {
        //processing result tree fragment N here, for example i need to convert //item/val to numbers and return a complicate f(N)
    }
]]>
</msxsl:script>
...
<xsl:value-of select="baator:test(//item)" />

在官方文档中有 C# 语言的示例,但没有 JScript 的示例。我尝试使用相同的类名但没有成功。 使用 JScript 很重要,因为在生产环境中已经在上面编写了函数。 谢谢!

【问题讨论】:

  • 您需要告诉我们您在哪个环境中使用哪个 XSLT 处理器作为 COM 世界中的 MSXML 和 .NET 框架世界中的 XslCompiledTransform 支持 JScript 中的扩展函数,但对象模型和类型映射节点集或树片段是完全不同的。对于您给出的示例,XSLT/XPath 站点上带有//item 的参数是item 元素的节点集。它如何映射到 JScript 站点上的类或类型取决于 XSLT 处理器,所以请告诉我们您使用的是哪一个。
  • 我为第三方公司开发的复杂crm系统创建xslt/html模板。 xslt 转换在用 ASP.NET 编写的服务器端执行。但我无法确定使用的是哪个 XSLT 处理器(如果 ASP.NET 中有多个实现)。
  • 尝试在您的环境中运行home.arcor.de/martin.honnen/xslt/processorTest2.xml,然后告诉我们您得到了哪个输出,以便我们知道您使用的是哪个 XSLT 处理器。如果您使用的是XslCompiledTransform,那么msdn.microsoft.com/en-us/library/wxaw5z5e%28v=vs.110%29.aspx 中的映射表示节点集应在.NET 代码中表示为XPathNodeIterator。如果这对您不起作用,那么我们需要查看您的代码。
  • 输出为:property name property value xsl:version 1 xsl:vendor Microsoft xsl:vendor-url microsoft.commsxsl:version v4.0.30319

标签: xslt jscript msxml msxsl


【解决方案1】:

假设您的 XSLT 处理器是 MSXML 的一个版本,例如在 Internet Explorer 中用作 XSLT 处理器的 MSXML 3 或 MSXML 6,那么 API 就是 http://msdn.microsoft.com/en-us/library/ms764730%28v=vs.85%29.aspx 中记录的 MSXML API。 XPath 表达式选择的一组节点将表示为IXMLDOMSelection(请参阅http://msdn.microsoft.com/en-us/library/ms757852%28v=vs.85%29.aspx),因此您可以将其编写为

function test(nodes) {
  var node;
  var sum = 0;
  while ((node = nodes.nextNode()) !== null) {
   sum += parseFloat(node.selectSingleNode('val').text.replace(',', '.'));
  }
  return sum;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多