Подтвердить что ты не робот

Включить встроенный 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.

4b9b3361

Ответ 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>