XSLT - [123]
> .
> .
> .
Операция завершена. Результаты показаны на рис. 10.3. При щелчке на кнопке таблица сортируется заново по выбранному значению узла (имейте в виду, что сортировка ведется по алфавиту; сортировка по числовым значениям обсуждается в главе 5, где описывается элемент >
) и отображается еще раз с новым порядком сортировки. Вот вся HTML-страница (листинг 10.3).
>
>
>
> Applying Dynamic Styles
>
>
> 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
> = sortNode;
> HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);
> }
>
>
>
>
>
>
>
>
>
>
>
>
>
>
На самом деле загрузить документы XML и XSL в Internet Explorer можно несколькими способами. Для создания объектов >XMLDocument
и >XSLDocument
я использовал класс ActiveXObject, но эти объекты можно создавать и непосредственно обращаясь к содержащим документы XML объектам ActiveX по идентификатору класса, хранимому в реестре Windows. В следующем примере я таким образом загружу >planets.xml
и >planets.xsl
в >XMLDocument
и >XSLDocument
:
>XMLDocument = document.all['XMLdoc'];
>XSLDocument = document.all['XSLdoc'];
>XMLDocument.load('planets.xml');
>XSLDocument.load(' planets.xsl');
>.
>.
>.
>
> CLASSID="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
>
>
> CLASSID="clsid:f5078f32-c551-11d3-89b9-0000f81fe221">
>
Эта техника не так надежна, как использование класса >ActiveXObject
, поскольку идентификаторы классов могут различаться в разных версиях Internet Explorer. (Приведены идентификаторы классов для Internet Explorer 5.5). Но есть еще один способ загрузить документы XML и XSL в Internet Explorer — при помощи участков (island) XML.
Internet Explorer и участки данных XML
В Internet Explorer есть специальный тег >
, при помощи которого можно создавать участки (island) XML. Участок XML может содержать либо сам код XML, либо ссылку на XML-документ.
Участки XML упрощают загрузку документов XML и XSL, поэтому их стоит здесь рассмотреть. В следующем примере я создаю два участка XML, >sourceDocument
и >stylesheet
, и загружаю >planets.xml
и >planets.xsl
, просто обратившись к ним через атрибут >src
:
>
>
>
> The Planets Table
>
>
>
> .
> .
> .
Теперь для осуществления XSLT-преобразования мне нужно только применить, как и раньше, метод Вот и все. Заметьте, что по умолчанию Internet Explorer 5.5 и младше использует устаревший процессор XSLT, как обсуждалось в главе 2 (если специально не установить процессор MSXML3 в режиме замены или IE 6.0, о чем также говорилось в главе 2). Если вы работаете с IE 5.5 или младше, у вас в распоряжении таблица стилей Internet Explorer прежнего образца, в которой нет правил по умолчанию и в которой вам придется использовать старое пространство имен XSL, как в этом примере (листинг 10 5).>transformNode
и присвоить результаты элементу >
>
>
>
> The Planets Table
>
>
>
>
> targetDIV.innerHTML =
> sourceDocument.transformNode(stylesheet.XMLDocument);
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> The Planets Table
>
>
>
>
> The Planets Table
>
>