JavaScript в клиентской XSL-обработке? - PullRequest
2 голосов
/ 15 сентября 2008

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

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

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

Ответы [ 4 ]

4 голосов
/ 16 сентября 2008

Чтобы встроить JavaScript для помощи преобразования, вы можете использовать , но ограничено реализацией объектов 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, но я могу мечтать.

2 голосов
/ 16 сентября 2008

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

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

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

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

1 голос
/ 16 сентября 2008

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

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

1 голос
/ 15 сентября 2008

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

Страница:

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

Учебник по XSLT:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...