Преобразования расширяемого языка таблиц стилей (XSLT) предоставляют способ для автоматического перевода XML-данных из одной формы в другую. Целевая форма - это обычно другой XML-документ, но не обязательно; вы можете преобразовать XML практически во что угодно, просто создав таблицу стилей XSLT и обработав данные. Фактическая сборка результирующего документа происходит, когда исходный документ и лист стилей XSLT передаются в синтаксический анализатор XSLT (XSLT-процессор). При использовании XSLT в среде Web, синтаксический анализ может происходить либо на стороне пользователя (т.е. в пользовательском браузере), либо на стороне сервера. Анализ XSLT на стороне клиента похож на процедуру применения каскадных листов стилей. В исходный документ нужно добавить тег <?xml-stylesheet type="text/xsl" href="transform.xsl" ?>
Пример преобразования XML в HTML
Файл pushkin.xml
<author id="1">
<fio> <f>Пушкин</f> <i>Александр</i> <o>Сергеевич</o> </fio>
<born>1799</born>
<rip>1837</rip>
<registry country="Россия" city="Москва" />
<text> Александр Сергеевич <b>Пушкин</b> - наше все! <br />
Пушкин разбудил <a href=«http://…»>Лермонтова</a> </text> </author>
Файл puschkin-family.xsl
<xsl:template match="/"> <html> <body> <h1> <xsl:value-of select="author/fio/f"/> </h1> </body> </html> </xsl:template>
Результат преобразования будет таким
<html> <body> <h1> Пушкин </h1> </body> </html>
Процессор по инструкции xsl:template начинает обработку корневого узла "/", выводит все тексты и HTML-теги из XSLT-шаблона до тех пор, пока не встретит новые xsl-инструкции. Единственная инструкция в примере xsl:value-of. Эта инструкция указывает процессору, что нужно вывести содержимое узла, указанного в параметре select. В этом параметре указан путь к интересующему нас элементу входного дерева - элементу, содержащему фамилию.
Общую структуру XSL лучше видно на сравнительном примере:
XML:
<tutorial><title>"Заметки об XSL"</title><author>Леонов Игорь Васильевич</author></tutorial>
XSL:
<xsl:template match="/">
<p><strong><xsl:value-of select="//author"/></strong></p>
<p><xsl:value-of select="//title"/></p></xsl:template>