Microsoft, был одной из первых рабочих реализаций XSLT. К сожалению, в этом прототипе был реализован ранний диалект языка, не совместимый со стандартной версией XSLT. Он получил большое распространение вместе с браузерами Internet Explorer 4.0, 5.0 и 5.5, и, как результат, множество программистов и по сей день работают с нестандартной версией XSLT, которая описывается пространством имен 'http://www.w3.org/TR/WD-xsl'
. Поддержка стандартного XSLT была реализована в версии MSXML 3.0, которая вышла в марте 2000 года (более полная, production-версия появилась чуть позже, осенью).
Ранний вариант XSLT, реализованный в MSXML 2.0 и ниже, имеет схожие с XSLT 1.0 принципы, но также и целый ряд несовместимых отличий. Следует скорее сказать, что WD-xsl — это другой язык и программировать на нем тоже следует по-другому. Для того чтобы использовать стандартный XSLT в MSXML, следует обновить этот компонент, загрузив новую версию с Web-сайта Microsoft. Однако, и это еще не все. Дело в том, что Microsoft не отказалась от старой нестандартной версии и MSXML 3.0 поддерживает ее наравне с XSLT 1.0. Более того, по умолчанию, MSXML устанавливается в так называемом side-by-side режиме (англ. side-by-side - бок о бок). Это означает, что вновь установленный компонент не замещает предыдущую версию полностью. Поэтому устанавливать MSXML следует в режиме замены — по окончанию установки следует воспользоваться утилитой xmlinst.exe, также доступной с Web-сайта Microsoft для того, чтобы полностью заменить старую версию.
Типичными симптомами не до конца обновленной версии MSXML является следующее:
□ при попытке выполнить корректные преобразования, определенные в пространстве имен с URI 'http://www.w3.org/1999/XSL/Transform'
, не происходит ничего или выдается ошибка;
□ при попытке выполнить те же преобразования, исправив URI на 'http://www.w3.org/TR/WD-xsl'
, процессор пытается выполнить преобразование, но выдает ошибку о некорректности преобразования (в то время как оно работает на других процессорах);
□ в преобразованиях не работают переменные, именованные шаблоны, шаблоны значений атрибутов, ключи и импортирование.
В случае обнаружения подобных признаков единственным советом является обновление версии MSXML в режиме замены.
Перед установкой MSXML3 рекомендуется внимательно ознакомиться с документацией на предмет возможности установки в режиме замены. Некоторые программные продукты (такие, как SQL Server и Biztalk Server) используют старую версию XSLT-процессора, и обновление в режиме замены приведет к нестабильности их работы.
Использование
Так как MSXML уже давно превратился в стандартный компонент Windows, использовать его можно разными способами - например, в собственных приложениях или как ISAPI-расширение. При разработке XSLT-преобразований MSXML, как правило, применяется либо совместно с браузером Internet Explorer, либо как самостоятельная утилита командной строки.
Первый способ заключается в том, что с XML-документом посредством инструкции xml- stylesheet
ассоциируется преобразование и Internet Explorer отображает результат преобразования.
<?xml-stylesheet type='text/xsl' href='stylesheet.xsl'?>
<date>18.10.2001</date>
<?xml version='1.0' encoding='windows-1251'?>
<xsl:stylesheet
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<html>
<head>
<title>Today is page</title>
</head>
<body>
<xsl:apply-templates select='date'/>
</body>
</html>
</xsl:template>
<xsl:template match='date'>
<H1>
<xsl:text>Сегодня </xsl:text>
<xsl:value-of select='.'/>
</H1>
</xsl:template>
</xsl:stylesheet>
Документ source.xml будет отображен в браузере Internet Explorer следующим образом (рис. П1.4).
Рис. П1.4. Документ source.xml, отображенный браузером Internet Explorer
Другим, вариантом является использование утилиты командной строки msxsl.exe
, которая также доступна на Web-сайте MSDN. Эта утилита есть не более чем оболочка для MSXML, позволяющая вызывать основной компонент из командной строки.
Использование msxsl.exe
совершенно стандартно: для применения преобразования stylesheet.xsl
к документу source.xml
и вывода результата в файле result.xml
нужно выполнить следующую команду:
msxsl.exe source.xml stylesheet.xsl -о result.xml
Расширения
MSXML поддерживает пользовательские функции расширения, которые могут быть написаны на скриптовых языках VBScript и JScript и включены непосредственно в сами преобразования.
<?xml version='1.0' encoding='windows-1251'?>
<page>Сегодня <date/>.</page>