Ошибки Jscript при внедрении в XSLT — объект не поддерживает это свойство или метод

#javascript #xslt-1.0 #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, я также заменил все функции ES6, специфичные для встроенного JScript. Казалось, это решило проблемы, выделенные в определенной строке, но теперь, когда это срабатывает в последней скобке, у меня нет идей. Сообщение также сбивает с толку, поскольку входным параметром всегда является строка, а все методы, используемые ниже, являются довольно ванильными методами для типа объекта string.

Есть ли здесь метод, который не поддерживается при запуске XSLT? Сам скрипт был в порядке, когда я тестировал его как отдельный фрагмент кода на Node.js.

Спасибо, Бен

Комментарии:

1. line = 47, col = 5 — код не такой уж длинный … может быть, это так .trim() ? Я имею в виду, что если у строки нет .includes() , то, вероятно, у нее тоже не будет .trim()

2. @Bravo извините, используемое сообщение об ошибке содержит код, который был заменен комментарием в строке 4 элемента JScript. Удаление .trim() решило проблему. Спасибо!

Ответ №1:

@Bravo указал в комментариях, чтобы попытаться удалить .trim() из команды возврата. Таким образом, похоже, что этот метод не поддерживается при внедрении в шаблон XSLT. Спасибо!

Комментарии:

1. Microsoft JScript основан на очень старой спецификации javascript (я имею в виду, что она называется jscript, а не javascript) — еще тогда, когда microsoft думала, что они могут переписать Интернет для себя :p