JavaScript в обработке XSL на стороне клиента?

Можно ли выполнить встроенный в XML код JavaScript, чтобы помочь в преобразованиях XSL на стороне клиента (на основе браузера)? Как это делается и насколько официально?

Объекты Microsoft XML DOM позволяют это на стороне сервера (т.е. в ASP/ASP.NET).

Пояснение: я не имею в виду сценарии HTML DOM, выполняемые после преобразования документа, и я не имею в виду преобразования XSL, инициированные JavaScript в браузере ( например, что показывает страница W3Schools). Я имею в виду фактические блоки сценариев, расположенные в XSL во время преобразования.


person Neil C. Obremski    schedule 15.09.2008    source источник


Ответы (4)


Чтобы внедрить JavaScript для преобразования, вы можете использовать ‹xsl:script›, но он ограничен реализацией XML-объектов Microsoft. Вот пример:

scripted.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="scripted.xsl"?>
<data a="v">
    ding dong
</data>

scripted.xsl:

<?xml version="1.0" encoding="ISO-8859-1"?>
<html xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:script implements-prefix="local" language="JScript"><![CDATA[

    function Title()
    {
        return "Scripted";
    }

    function Body(text)
    {
        return "/" + text + "/";
    }

]]></xsl:script>
<head>
    <title><xsl:eval>Title()</xsl:eval></title>
</head>
<body>
    <xsl:for-each select="/data"><xsl:eval>Body(nodeTypedValue)</xsl:eval></xsl:for-each>
</body>
</html>

Результат в Internet Explorer (или если вы просто используете MSXML из COM/.NET):

<html>
<head>
    <title>Scripted</titlte>
</head>
<body>
    /ding dong/
</body>
</html>

Похоже, что он не поддерживает обычные конструкции шаблонов XSL, а добавление корневого узла приводит к тому, что MSXML переходит в какой-то стандартный режим, где он не будет работать.

Я не уверен, есть ли аналогичная функциональность в стандартном XSL, но я могу мечтать.

person Neil C. Obremski    schedule 16.09.2008

Я не думаю, что вы можете выполнять код JavaScript, встроенный в XML-документы. Например, как упомянул гелиос, вы можете выполнить преобразование с помощью JavaScript.

В большинстве случаев JavaScript встраивается как CDATA, который обычно используется после преобразования XSL. Если я правильно понимаю, вы хотите иметь исполняемый тег ‹script› в вашем XML.

Вы можете использовать параметры и шаблоны XSL, если вам нужен больший контроль над вашими преобразованиями. Вы можете установить эти значения в своем XSLT, а затем передать их в exec(). Mozilla поддерживает установку параметров в XSL, но я не уверен в другие браузеры.

Кроме того, кросс-браузерный JavaScript/XSLT — головная боль. интерфейс Mozilla JavaScript/XSLT сильно отличается от IE, поэтому вы можете полагаться на независимую от браузера библиотеку, такую ​​как XSLT jQuery.

person cubex    schedule 15.09.2008

да. Это зависит от браузера, но вы можете использовать Javascript. На w3schools.com есть небольшой, но практичный учебник. Это часть руководства по XSLT.

Страница:

http://www.w3schools.com/xsl/xsl_client.asp

Учебник XSLT:

http://www.w3schools.com/xsl/default.asp

Этот сайт будет более полезным, чем я. Удачи!

person helios    schedule 15.09.2008

Я сомневаюсь, что вы найдете то, что ищете, если «официальный» означает «основанный на стандартах». То, что вы описываете, представляет собой язык сценариев пользовательского агента, который необходимо анализировать и выполнять во время синтаксического анализа таблицы стилей. Если ваша цель состоит в том, чтобы упростить XSLT, выполняя грязную работу в Javascript, вам может быть лучше попытаться сгенерировать XSLT в javascript, а затем использовать оболочку класса для анализа результата с помощью собственного синтаксического анализатора XSLT браузера.

Это, конечно, намного больше работы, чем вы, вероятно, подписались, но если вы уверены, что хотите это сделать, я бы посмотрел на Микрошаблоны Javascript Джона Резига для динамического хранения удобного для шаблонов XSLT в вашем javascript.

person enricopulatzo    schedule 15.09.2008