Включить встроенный JavaScript с фигурными скобками {} в XSL
Я пытаюсь преобразовать XML в HTML через XSL файл. К сожалению, это не позволяет мне использовать фигурные скобки JavaScript {}. Ниже приведен тривиальный пример, но мой фактический код намного больше.
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/>
<xsl:template match='/'>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> Page Title</title>
</head>
<body onload="javascript: if(confirm('Are you sure?')) { return true;} else { return false;}">
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Visual Studio дает мне следующую ошибку:
Expected token '}', found 'true'. ...firm('Are you sure?')) { return -->true<-- ;} else { return false;}
Есть ли способ включить встроенный JavaScript в XSL? Я знаю, что вы можете использовать <![CDATA[ ]]>
для выхода из блоков Javascript. Но как избежать встроенного JavaScript? Мой реальный код слишком велик, чтобы перезаписать весь встроенный JavaScript как script.
Ответы
Ответ 1
Вставные фигурные скобки в атрибутах литеральных элементов результата используются для "шаблонов значений атрибутов", включая выражения XPath. Поэтому, если вы хотите генерировать атрибуты, содержащие завитки, вам нужно избежать их удвоения:
<body onload="javascript: if(confirm('Are you sure?')) {{ return true;}} else {{ return false;}}">
Однако, в том числе большие блоки Javascript внутри атрибутов onXXX, вероятно, лучше всего избегать: вместо этого просто включите вызов функции в код, определенный в <script>
.
Ответ 2
Попробуйте это, он не должен требовать экранирования:
<body>
<xsl:attribute name="onload">
javascript: if(confirm('Are you sure?')) { return true;} else { return false;}
</xsl:attribute>
</body>