Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распред-ые СОИ.doc
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
591.87 Кб
Скачать

Сценарии

Сценарии могут использоваться в документах XSL точно также, как и в HTML. Кроме того, сценарии, содержащиеся внутри XSL-документа и запускаемые броузером в процессе обработки документа могут динамически создавать HTML-документы, извлекая необходимую для этого информацию непосредственно из элементов XSL-документа.

Для написания сценариев XSL использует специальный скриптовый язык - ECMAScript. Однако в msxsl для этих целей можно применять Microsoft JavaScript,- язык, который объединил в себе некоторые элементы стандартного JavaScript и ECMAScript.

Вычисление выражений

Наиболее простым примером использования сценариев в XSL -документе является вычисление значений параметров описываемых элементов. Для этого надо просто поставить знак равенства в качестве первого символа параметра, что заставит XSL-процессор вычислить значение выражения(синтаксис этого выражения должен отвечать требованиям JavaScript). Например, после разбора этого правила:

<rule>

<target-element type="header">

<hr width="=100-20+'%'">

<children/>

<hr width="80%">

</rule>

, в выходном документе окажутся следующие инструкции:

<hr width=80%>

...

<hr width=80%>

Очень часто в правилах XSL необходимо использовать атрибуты описываемого в них элемента. Для этого мы должны воспользоваться методом getAttribute(), описанным в объектной модели XML (мы рассматриваем объектную модель XML-документов, предложенную Microsoft, список этих функций приведен в конце раздела). Т.к. каждому элементу XSL доступен указатель на соответствующий ему объект, сценарий может обращаться к внутренним функциям и свойствам этих элементов, при помощи которых и осуществляются необходимые действия.

В следующем фрагменте XML- документа определяется элемент <article>, в котором атрибут src используется для задания адреса файла, содержащего текст статьи.

<articles>

<article src="http://server/pages/article.html">Bugs report</article>

</articles>

Для того, чтобы использовать этот атрибут в выходном HTML-документе, необходимо определить следующее правило:

<rule>

<target-element type="article">

<a href='=getAttribute("src")'>

<children/>

</a>

</rule>

После обработки этого фрагмента в выходной документ будет помещен элемент:

<a href="http://server/pages/article.html">Bugs report</a>

Выполнение инструкций

Другим способом помещения в выходной HTML- документ информации, являющейся результатом выполнения каких-либо операций JavaScript - сценариев является использовнаие инструкции <eval>;:

<rule>

<element type="articles">

<target-element type="article">

</element>

<tr><td><eval>childNumber(this)</eval></td><td>

<children/>

</td><tr>

</rule>

Метод childNumber в данном случае возвращает текущий номер дочернего элемента.

Определение функций и глобальных переменных

Аналогично тэгу <SCRIPT> в HTML, элемент <define-script> содержит функции и определения глобальных переменных. Обычно в XSL-документе определяется один элемент <define-script>, расположенный в самом начале.

<xsl>

<define-script>

<![CDATA[

var fontSize=12;

function getColor(elem){

return elem.children.item("color",0).text;

// Возвращает содержимое дочернего элемента <color>

}]]>

</define-script>

<rule>

<target-element type = "flower">

<div background-color="=getColor(this)"; font-size="=fontSize">

<children/>

</div>

</rule>

</xsl>

Если применить эти правила к такому фрагменту XML- документу:

<xml>

<flower>

rose

<color>red</color>

</flower>

, то на выходе HTML -документ будет содержать следующие элементы:

<div background-color="red"; font-size="12">

Необходимо отметить, что использование глобальных переменных в некоторых случаях может приводить к серьезным ошибкам, вызванным попытками одновременного к ним доступа. Поэтому рекомендуется использовать такие переменные только в качестве констант.