Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #77, МАЙ 2005 г.

Одежка для XML

Никита Кислицин

Хакер, номер #077, стр. 077-120-2


Так же тебе следует знать, что многие серверы баз данных уже умеют выводить результаты запросов прямо в формате XML и не за горами тот момент, когда генерация XML-моделей динамических страниц будет осуществляться еще на стадии выполнения запросов к базе данных.

[как это использовать?]

Файл преобразований XSLT – это, по сути своей, обычный XML-файл, имеющий строго определенный в спецификации формата вид. Этот файл подключается к XML-страницам при помощи следующего тэга:

<?xml-stylesheet type='text/xsl' href='design.xsl'?>

Чтобы тебе было понятнее, приведу пример простого xml-файла с данными и файла XSLT-преобразований.

XML-файл с подключенным файлом преобразований

<?xml version="1.0" encoding="windows-1251" ?>

<?xml-stylesheet type='text/xsl' href='xsl.xsl'?>

<xa number="77 (май)">

<vzlom caption="Взлом">

<article>

<title>HackFaq</title>

<comment>Хак-фак</comment>

<author>Sidex</author>

</article>

...

...

</vzlom>

</xa>

Обрати внимание, на второй строчке этого документа указано, что для форматирования должен быть применен XSL-файл article.xls.

[форматируем данные]

Теперь, чтобы все работало, необходимо создать файл articles.xls и задать в нем правила форматирования. Делается это примерно так:

Пример файла преобразований

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<h1><xsl:value-of select="xa/@number"/></h1>

<h2><xsl:value-of select="xa/vzlom/@caption"/></h2>

<table border="1" cellpadding="0">

<xsl:for-each select="xa/vzlom/article">

<tr><td><xsl:value-of select="title"/></td><td><xsl:value-of select="comment"/></td><td><xsl:value-of select="author"/></td></tr>

</xsl:for-each>

</table>

</xsl:template>

</xsl:stylesheet>

Каждый файл с XSL-преобразованиями начинается с элемента xsl:stylesheet, в параметрах которого указывается версия (version='1.0') и статичная ссылка на пространство имен. Эта строка, вообще говоря, одинаковая для всех файлов преобразований.

После главной строки в моем примере идет элемент xsl:template, указывающий шаблон элементов, для которых будет применены правила преобразований. Здесь можно указать тип элемента, его конкретное название, или довольно гибко определить целый класс подходящих под шаблон элементов. Я не буду приводить здесь полного описания шаблонов, ты найдешь его на нашем диске среди большого числа полезных документов, которые тебе настоятельно советую изучить.

Третьей строчкой файла преобразований я вывожу в пределах тега h1 содержимое атрибута элемента с именем xa. Тут следует пояснить, что мы работаем в рамках шаблона, указывающего на корневой элемент (он обозначается символом “/”) и поэтому элемент xa – наш прямой потомок. Легко понять, что доступ к атрибутам какого-то элемента осуществляется при помощи конструкции element/@var.

На пятой строке XSL-файла я вывожу тэг table, поскольку мне захотелось оформить файл в виде таблицы. Затем, при помощи элемента xsl:for-each, я организую своеобразный цикл по всем записям со статьями и вывожу информацию о них, форматируя в колонки таблицы при помощи тэгов <tr> и <td>. Обрати внимание, что в рамках цикла содержимое элементов получается так же, как и в обычном случае - при помощи элемента xsl:value-of.

Назад на стр. 077-120-1  Содержание  Вперед на стр. 077-120-3