загружены, преобразование можно осуществить методом transformNode
. Посмотрите, как я преобразую XMLDocument
при помощи XSLDocument
и показываю результат в элементе-приемнике <DIV>
:
<HTML>
<HEAD>
<TITLE>XSLT Using JavaScript</TITLE>
<SCRIPT LANGUAGE='JavaScript'>
function xslt() {
var XMLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');
var XSLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');
var HTMLtarget = document.all['targetDIV'];
.
.
HTMLtarget.innerHTML = XMLDocument.transformNode (XSLDocument);
return true;
}
</SCRIPT>
</HEAD>
<BODY onload='xslt()'>
<DIV ID='targetDIV'>
</DIV>
</BODY>
</HTML>
Эти результаты показаны на рис. 10.1.

Рис. 10.1. Использование JavaScript для преобразования документа
Обработка ошибок разбора
При использовании JavaScript для загрузки документов XML и XSL и работы с ними важно знать, как сообщать об ошибках разбора. В предыдущем примере я сообщал об ошибках, выводя сообщение «Error!» в элементе-приемнике <DIV>
документа HTML, но это не очень информативно. Как получить дополнительную информацию?
В следующем примере я намерено создаю ошибку разбора, изменив первый тег <PLANET>
в planets.xml
на тег <PLANETS>
:
<?xml version='1.0'?>
<?xml-stylesheet type='text/xml' href='planets.xsl'?>
<PLANETS>
<PLANETS>
<NAME>Mercury</NAME>
<MASS UNITS='(Earth = 1)'>.0553</MASS>
<DAY UNITS='days'>58.65</DAY>
<RADIUS UNITS='miles'>1516</RADIUS>
<DENSITY UNITS='(Earth = 1)'>.983</DENSITY>
<DISTANCE UNITS='million miles'>43.4</DISTANCE><!--B перигелии-- >
</PLANET>
.
.
.
Я установил свойство validateOnParse
объекта XMLDocument
в true
(значение по умолчанию — false
, что означает отсутствие проверки), поэтому процессор MSXML отловит эту ошибку разбора. Объект XMLDocument
содержит объект parseError
, и если его свойство errorCode
не равно нулю, это означает наличие ошибки. Сейчас я хочу не просто вывести сообщение «Error!», а расшифровать ошибку при помощи новой функции getError
, которая возвращает строку с информацией о месте и причине ошибки.
С целый получения этой дополнительной информации я использую свойства <url, line, linepos и reason объекта parseError для того, чтобы определить вызвавший проблему файл, строку, позицию ошибки и ее описание (листинг 10.1).
<HTML>
<HEAD>
<TITLE>XSLT Using JavaScript</TITLE>
<SCRIPT LANGUAGE='JavaScript'>
function xslt() {
var XMLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');
var XSLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');
var HTMLtarget = document.all['targetDIV'];
XMLDocument.validateOnParse = true;
XMLDocument.load('planets.xml');
if (XMLDocument.parseError.errorCode != 0) {
HTMLtarget.innerHTML = getError(XMLDocument);
return false;
}
XSLDocument.validateOnParse = true;
XSLDocument.load('planets.xsl');
if (XSLDocument.parseError.errorCode != 0) {
HTMLtarget.innerHTML = getError(XSLDocument);
return false;
}
HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);
return true;
}
function getError(errorObject) {
var Error = new String;
Error = 'Error. ' + errorObject.parseError.url + '<BR>' +
'Line: ' + errorObject.parseError.line + '<BR>' +
'Character: ' + errorObject.parseError.linepos + '<BR>' +
'Description: ' + errorObject.parseError.reason;
return Error;
}
</SCRIPT>
</HEAD>