Кроссбраузерное XSLT-преобразование в JavaScript
Столкнулся я однажды с необходимостью отобразить XML-данные погодного информера gismeteo посредством XSLT-шаблона. Причем возникла острая необходимость сделать это через JavaScript, так как на предлагаемом бесплатном хостинге не было поддержки PHP, а значит отпарсить XML на сервере не представлялось возможным.
В результате этой острой необходимости родился код на JavaScript, который я и предлагаю на ваше рассмотрение.
function transformXslt(source,style) {
if(window.ActiveXObject)
{
return source.transformNode(style);
}
else if(window.XSLTProcessor)
{
var xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(style);
var resultDocument = xsltProcessor.transformToDocument(source);
var xmls = new XMLSerializer();
return xmls.serializeToString(resultDocument);
}
else
{
alert("Преобразование XML не поддерживается браузером");
return null;
}
}
Что мы здесь видим?
А видим мы здесь кроссбраузерное решение данной задачи. XSLT-преобразование в IE производится посредством метода transformNode XML-документа. Во всех остальных браузерах(FF, Chrome, Safari, Opera) XSLT-преобразование делается совсем по-другому. И делается оно посредством объекта XSLTProcessor, в который методом importStylesheet загружается файл стилей XSLT, а результирующий документ генерируется методом transformToDocument(xml). И напоследок мы поручим объекту XMLSerializer сгенерить строковое представление результирующего XML-документа.
И напоследок еще одна полезная, и такая же кроссбраузерная, функция, которая преобразует строковое представление XML (и XSLT)-документа собственно в сам документ, готовый для его дальнейшего использования.
function getXMLFromString(s) {
if(window.ActiveXObject)
{
var xml;
xml=new ActiveXObject("Microsoft.XMLDOM");
xml.async=false;
xml.loadXML(s);
return xml;
}
else if(window.DOMParser)
{
var parser = new DOMParser();
return parser.parseFromString(s,'text/xml');
}
else
{
alert("Загрузка XML не поддерживается браузером");
return null;
}
}
Этот код я собираюсь оставить без комментариев, так как в нем и так все понятно.
Скачать файл с этими функциями вы можете здесь
Прочтите еще:


