Чтение онлайн

ЖАНРЫ

Холзнер Стивен

Шрифт:

XMLDocument.load('planets.xml');

if (XMLDocument.parseError.errorCode != 0) {

HTMLtarget.innerHTML = "Error!";

return false;

}

XSLDocument.validateOnParse = true;

XSLDocument.load('planets.xsl');

if (XSLDocument.parseError.errorCode != 0) {

HTMLtarget.innerHTML = "Error!";

return false;

}

HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);

}

.

.

.

Эту

часть вы уже видели раньше. Но пользователь теперь может отсортировать таблицу щелчком мыши по массе, радиусу и т.д. Для новой сортировки таблицы я написал функцию
sort
— ей при щелчке на кнопке передается имя узла (например, «MASS»), по которому нужно провести сортировку. Вот как создаются различные кнопки, показанные на рис. 10.3:

<INPUT ТУРЕ="BUTTON" ONCLICK="sort('NAME')" VALUE="Sort by name"></INPUT>

<INPUT TYPE="BUTTON" ONCLICK="sort('MASS')" VALUE="Sort by mass"></INPUT>

<INPUT TYPE="BUTTON" ONCLICK="sort('RADIUS')" VALUE="Sort by radius"></INPUT>

<INPUT TYPE="BUTTON" ONCLICK="sort('DAY')" VALUE="Sort by day"></INPUT>

Затем в функции

sort
я хочу выполнить новую сортировку по имени переданного узла. Для этого я изменяю атрибут
select
элемента
<xsl:sort>
на имя нового узла, по которому нужно сортировать. Вот как теперь выглядит атрибут
select
.

<xsl:apply-templates select="/PLANETS/PLANET">

 <xsl:sort select="NAME" order="ascending"/>

</xsl:apply-templates>

Я могу обратиться к этому узлу из таблицы стилей, теперь хранимой в объекте

XSLDocument
, передав в метод
selectSingleNode
упомянутого объекта выражение XPath. Метод
selectSingleNode
возвращает объект
node
, и можно изменить текстовое значение узла при помощи свойства
nodeValue
объекта
node
. В таком случае я только устанавливаю атрибут select в имя нового узла, по которому будет вестись сортировка:

<HTML>

 <HEAD>

<TITLE>

Applying Dynamic Styles

</TITLE>

<SCRIPT LANGUAGE="JavaScript">

function initialize {

.

.

.

}

function sort(sortNode) {

(XSLDocument.selectSingleNode("//xsl:sort/@select")).nodeValue

= sortNode;

.

.

.

}

 </SCRIPT>

 .

 .

Теперь

все, что осталось сделать, — снова выполнить преобразование и вывести результаты:

<HTML>

 <HEAD>

<TITLE>

Applying Dynamic Styles

</TITLE>

<SCRIPT LANGUAGE="JavaScript">

function initialize {

.

.

.

}

function sort(sortNode) {

(XSLDocument.selectSingleNode("//xsl:sort/@select")).nodeValue

= sortNode;

HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);

}

</SCRIPT>

 </HEAD>

 .

 .

 .

Операция завершена. Результаты показаны на рис. 10.3. При щелчке на кнопке таблица сортируется заново по выбранному значению узла (имейте в виду, что сортировка ведется по алфавиту; сортировка по числовым значениям обсуждается в главе 5, где описывается элемент

<xsl:sort>
) и отображается еще раз с новым порядком сортировки. Вот вся HTML-страница (листинг 10.3).

Листинг 10.3. Применение динамических XSLT-преобразований

<HTML>

 <HEAD>

<TITLE>

Applying Dynamic Styles

</TITLE>

<SCRIPT LANGUAGE="JavaScript">

var XMLDocument;

var XSLDocument;

var HTMLtarget;

function initialize {

XMLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');

XSLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');

HTMLtarget = document.all['targetDIV'];

XMLDocument.validateOnParse = true;

XMLDocument.load('planets.xml');

if (XMLDocument.parseError.errorCode != 0) {

HTMLtarget.innerHTML = "Error!";

return false;

}

XSLDocument.validateOnParse = true;

XSLDocument load('planets.xsl');

if (XSLDocument.parseError.errorCode != 0) {

HTMLtarget.innerHTML = "Error!";

return false;

}

HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);

}

function sort(sortNode) {

(XSLDocument.selectSingleNode("//xsl:sort/@select")).nodeValue

Поделиться с друзьями: