首页 > 解决方案 > 嵌入 XSLT 时出现 Jscript 错误 - 对象不支持此属性或方法

问题描述

我编写了一个 JavaScript 函数,它在 Node.js 中运行时通过了所有输入的测试。但是,当它嵌入到 XSLT 模板(使用 MS XML 解析)中时,它现在会导致运行时错误。下面的错误信息:-

COM+ Msg = Microsoft JScript runtime error
Object doesn't support this property or method
line = 47, col = 5 (line is offset from the start of the script block).
Error returned from property or method call.

错误消息中的行号对应于 JScript 函数的右括号。

下面的代码: -

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://www.stylusstudio.com/file-utilities">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <msxsl:script language="JScript" implements-prefix="user">
        <![CDATA[
            function TrimmedString(inString) {
                var stringArray = inString.split(' ');
                var keyword;
                /*logic omitted here assigns phrase to trim before in inString - assigned to keyword, blank if phrase doesn't exist*/
            
                if (keyword !== '') {
                    var outString = "";
                    for (var i = 0; i < stringArray.length; i++) {
                        if (i !== 0) {
                            outString += " ";
                        }
                        else if (stringArray[i].indexOf(keyword) == -1) {
                            outString += stringArray[i];
                        }
                        else {
                            break;
                        }
                    }
                    return TrimmedString(outString.toString());
                }
                else {
                    return inString.trim();
                }
            }
        ]]>
    </msxsl:script>
    
    <xsl:template match="/">
        <xsl:value-of select="user:TrimmedString(string(/XML_ParentNode/XML_ChildNode/@AttributeContainingString))"/>
    </xsl:template>
</xsl:stylesheet>

当错误第一次出现时,我删除了 string.includes() 的所有实例并将它们替换为 string.indexOf() !== -1,我还替换了嵌入式 JScript 中的所有 ES6 特定功能。这似乎解决了突出显示到特定行的问题,但现在它触发了最后一个括号,我没有想法。该消息也令人困惑,因为输入参数始终是一个字符串,并且下面使用的所有方法都是字符串对象类型的相当普通的方法。

XSLT 运行时不支持这里的方法吗?当我在 Node.js 上将其作为独立代码进行测试时,脚本本身很好。

谢谢,本

标签: javascriptxslt-1.0jscript

解决方案


@Bravo 在评论中指出尝试从 return 命令中删除 .trim() 。因此,当嵌入到 XSLT 模板中时,似乎不支持此方法。谢谢!


推荐阅读