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);
}
</SCRIPT>
</HEAD>
<BODY ONLOAD='initialize()'>
<CENTER>
<DIV ID='targetDIV'></DIV>
<BR>
<BR>
<INPUT TYPE='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>
</CENTER>
</BODY>
</HTML>
На самом деле загрузить документы 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');
.
.
.
<OBJECT ID='XMLdoc' WIDTH='0' HEIGHT='0'
CLASSID='clsid:f5078f32-c551-11d3-89b9-0000f81fe221'>
</OBJECT>
<OBJECT ID='XSLdoc' WIDTH='0' HEIGHT='0'
CLASSID='clsid:f5078f32-c551-11d3-89b9-0000f81fe221'>
</OBJECT>
Эта техника не так надежна, как использование класса ActiveXObject
, поскольку идентификаторы классов могут различаться в разных версиях Internet Explorer. (Приведены идентификаторы классов для Internet Explorer 5.5). Но есть еще один способ загрузить документы XML и XSL в Internet Explorer — при помощи
Internet Explorer и участки данных XML
В Internet Explorer есть специальный тег <XML>
, при помощи которого можно создавать участки (island) XML. Участок XML может содержать либо сам код XML, либо ссылку на XML- документ.
Участки XML упрощают загрузку документов XML и XSL, поэтому их стоит здесь рассмотреть. В следующем примере я создаю два участка XML, sourceDocument
и stylesheet
, и загружаю planets.xml
и planets.xsl
, просто обратившись к ним через атрибут src
:
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
<XML id='sourceDocument' src='planets.xml'></XML>
<XML id='stylesheet' src='planets.xsl'></XML>
.
.
.
Теперь для осуществления XSLT-преобразования мне нужно только применить, как и раньше, метод transformNode
и присвоить результаты элементу <DIV>
, чтобы вывести их (листинг 10.4).
<HTML>
<HEAD>
<TITLE>
The Planets Table
</TITLE>
<XML id='sourceDocument' src='planets.xml'></XML>
<XML id='stylesheet' src='planets.xsl'></XML>
<SCRIPT FOR='window' EVENT='onload'>
targetDIV.innerHTML =
sourceDocument.transformNode(stylesheet.XMLDocument);