#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