Это было слишком долго, чтобы писать в комментариях, но предполагалось, что для someText
установлено просто "Эй". Если вы делаете именно это
node.setAttribute('select', someText);
Тогда это то же самое, что сделать это непосредственно в XSLT
<xsl:variable name="vartext" select="Hey" />
Это выберет элемент с именем «Эй», а не текстовый литерал «Эй»
Что вы можете сделать, это ...
node.setAttribute('select', '"' + someText + '"');
Это будет эквивалентно выполнению этого в XSLT
<xsl:variable name="vartext" select='"Hey"' />
Это также будет работать, если у вас есть апостроф в переменной someText
, и вам не нужно экранировать его в javascript. Тем не менее, он потерпит неудачу, если у вас есть кавычка "
в someText
.
Что было бы проще, справиться и с апострофами, и с кавычками, это удалить атрибут select и добавить текст в качестве дочернего узла
node.removeAttribute("select");
node.appendChild(xsl.createTextNode(someText));
Это было бы то же самое, что делать это ...
<xsl:variable name="vartext">Hey 'Text "It works!"</xsl:variable>
Конечно, на самом деле вы должны изменить XSLT на использование параметров. Не в последнюю очередь потому, что «selectSingleNode» поддерживается только в Internet Explorer.
Если вы можете изменить XSLT для использования параметров, есть другие вопросы по StackOverflow, чтобы показать, что вы должны устанавливать параметры в Javascript. См. Как передать параметр в XSLT из функции Javascript, например, .