【发布时间】: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