XML - статьи

Первые шаги


Разберем теперь более подробно первый пример. Напомним его текст.

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

<tutorial>

<title>"Заметки об XSL"</title>

<author>Леонов Игорь Васильевич</author>

</tutorial>

Первая строка информирует браузер о том, что файл имеет формат XML. Атрибут version является обязательным. Атрибут encoding не является обязательным, но если у вас в тексте есть русские буквы, то необходимо вставить этот атрибут, в противном случае XML-файл просто не будет обрабатываться, - вы получите сообщение об ошибке.

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

Элементы могут иметь атрибуты, значения которых тоже могут обрабатываться в соответствии с шаблоном.

На верхнем уровне XML-файла всегда находится один элемент. То есть файл вида

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

<tutorial>

<title>"Заметки об XSL"</title>



<author>Леонов Игорь Васильевич</author>

</tutorial>

<tutorial>

<title>"Введение в CSP"</title>

<author>Леонов Игорь Васильевич</author>

</tutorial>

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

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

<knowledgeDatabase>

<tutorial>

<title>"Заметки об XSL"</title>

<author>Леонов Игорь Васильевич</author>

</tutorial>

<tutorial>

<title>"Введение в CSP"</title>

<author>Леонов Игорь Васильевич</author>

</tutorial>

</knowledgeDatabase>

Отметим, что имена тегов чувствительны к регистру символов. Подробнее об этом можно прочесть в любой книге по XML - элементам и атрибутам в этих книгах уделяется достаточно большое внимание.


Перейдем теперь к шаблону преобразования - к XSL-файлу. Задача XSL-файла - преобразовать дерево XML-файла в другое дерево, которое, например, будет соответствовать формату HTML и может быть изображено на экране браузера с учетом форматирования, выбора шрифтов и т.п.

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

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

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

Рассмотрим теперь текст XSL-файла

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

<xsl:template match="/">

<p><strong><xsl:value-of select="//title""/></strong></p>

<p><xsl:value-of select="//author"/></p>

</xsl:template>

</xsl:stylesheet>

Первая строка файла содержит тег элемента xsl:stylesheet. Атрибуты элемента - номер версии и ссылка на пространство имен. Эти атрибуты элемента xsl:stylesheet являются обязательными. В нашем случае пространство имен - это все имена элементов и их атрибутов, которые могут использоваться в XSL-файле. Для XSL-файлов ссылка на пространство имен является стандартной.

Заметим, что XSL-файл является одной из разновидностей XML-файлов. Он не содержит пользовательских данных, но формат его тот же самый. Файл содержит элемент верхнего уровня xsl:stylesheet, а далее идет дерево правил преобразования.

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

В дальнейшем тексты XML- и XSL-файлов мы будем приводить в черно-белом варианте. Вы всегда сможете открыть реальный файл и посмотреть все в цвете. При необходимости закомментируйте ссылку на XSL-файл. Синтаксис комментария следующий - <!-- Текст комментария -->. В текст комментария нельзя вставлять символы --.



В первом примере мы посмотрели, как с помощью элемента xsl:value-of можно вывести в HTML-формате содержание элемента (текст, заключенный между тегами). Теперь мы посмотрим, как при помощи того же самого элемента можно вывести значение атрибута элемента.

Рассмотрим следующий XML-файл

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

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

<tutorial>

<dog caption="Собака: " name="Шарик">

<dogInfo weight="18 кг" color="рыжий с черными подпалинами"/>

</dog>

</tutorial>

В этом файле информация хранится не в содержании элементов, а в виде значений атрибутов. Файл имеет вид

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

<xsl:template match="/">

<P><B><xsl:value-of select="//dog/@caption"/></B>

<xsl:value-of select="//dog/@name"/>.

<xsl:value-of select="//dogInfo/@weight"/>, <xsl:value-of select="//dogInfo/@color"/>.</P>

</xsl:template>

</xsl:stylesheet>

Обратите внимание на синтаксис ссылки на атрибут элемента - //dog/@name. Имя элемента и имя атрибута разделены парой символов "/@". В остальном синтаксис тот же самый, что и для ссылки на содержание элемента.

Результат имеет следующий вид:

Собака: Шарик. 18 кг, рыжий с черными подпалинами.

Обратим теперь внимание на следующий момент. В XSL-файле мы никак не использовали элемент tutorial. На самом деле можно было использовать полный путь. Перепишем наш XML-файл, увеличив глубину дерева ()

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

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

<tutorial>

<enimals>

<dog caption="Собака: " name="Шарик">

<dogInfo weight="18 кг" color="рыжий с черными подпалинами"/>



</dog>

</enimals>

</tutorial>

Файл имеет вид

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

<xsl:template match="/">

<P><B><xsl:value-of select="//enimals/dog/@caption"/></B>

<xsl:value-of select="//enimals/dog/@name"/>.

<xsl:value-of select="//enimals/dog/dogInfo/@weight"/>, <xsl:value-of select="//dogInfo/@color"/>.</P>

</xsl:template>

</xsl:stylesheet>

Результат будет тем же самым.

Собака: Шарик. 18 кг, рыжий с черными подпалинами.

В этом примере мы использовали полную ссылку для значений атрибутов. При выводе одиночных значений оба варианта - полная и сокращенная ссылка - работают одинаково.

На этом мы закончим разбор примеров с выводом одиночных значений и перейдем к выводу табличной информации - к выводу результатов запроса.


Содержание раздела