EXSLT 为 XSLT 提供了一组有用的扩展。可能我们大多数人都使用过 exslt:node-set 函数。EXSLT 指定的另一个函数之一是“exslt:object-type”。不幸的是,大多数浏览器(Firefox 除外)似乎不支持此功能。参考: http: //greenbytes.de/tech/tc/xslt/ 虽然我设法在 IE 中使用脚本实现了这个功能,但我似乎没有找到适用于 Google Chrome 的解决方法。(这是 IE 似乎优于 Chrome 的时代之一)。
我的应用程序的主要目标是找出参数是否是“节点集”。或者更准确地说 - 如果可以在 xsl:apply-templates 中选择参数。
IE 实现可能与以下类似:
<msxso:script language="JScript" implements-prefix="exslt"> <![CDATA[ this['object-type'] = function(x) { 开关(类型 x){ 案例“数字”:返回“数字”; 案例“字符串”:返回“字符串”; 案例“对象”:返回“节点集”; 默认值:返回类型 x } } ]]> </msxso:脚本>
所以问题是 - 如何在谷歌浏览器中做类似的事情。
请理解,解决方案不是手动重写源样式表,因为这应该是完全自动化的过程。
我的场景如下:代理提交 XML + XSLT,该过程自动重写 XSLT 以将 xsl:value-of 转换为 xsl:apply-templates。虽然 xsl:value-of 的 select 属性的类型无关紧要,但当 select 属性无法解析为节点集时,xsl:apply-templates 将失败。