Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Язык записи преобразований XSLT БРЕД, не стала разбираться, что из этого надо, а что нет




Одна из реализаций XML. По традиции, документ, записанный на языке XSLT, называется таблицей стилей (style­sheet), хотя его правильнее назвать документом, содержащим правила пре­образований.

Все элементы XML, объявленные в языке XSLT, относятся к пространству имен http://www.w3.org/1999/XSL/Transform. Обычно они записываются с префиксом xsl. Если принят этот префикс, то корневой элемент документа XSLT— таблицы стилей— будет называться xsl:stylesheet. Как синоним этого имени можно записывать корневой элемент таблицы стилей с именем xsl:transform.

У корневого элемента xsl:stylesheet есть один обязательный атрибут version, указывающий версию языка. Во время написания книги его значе­нием был номер "1.0". Для процессоров XSLT 2.0 значение атрибута version="i.O" будет означать, что надо обеспечить обратную совместимость с версией XSLT 1.0.

Простейшая таблица стилей XSLT выглядит так, как записано в листин­ге 8.6.

Листинг 8.6. Простейшая таблица стилей XSLT

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

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" encoding="CP866" />

</xsl:stylesheet>

Здесь только определяется префикс xsl пространства имен http:// www.w3.org/1999/XSL/Transform и задается один стиль — шаблон xsl:output для вывода на стандартное устройство.

Эту таблицу стилей записываем в файл, например, simple.xsl. Ссылку на таблицу стилей можно поместить в документ XML как одну из инструкций по обработке, а именно инструкцию xml-stylesheet. Пример такой ссылки приведен в листинге 8.7.

Листинг 8.7. Документ XML со ссылкой на таблицу стилей

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

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

<notebook>

<person>

<name first="HBaH" second="neTpoBK4" surname="OmopoB" />

"Увидев" инструкцию по обработке xml-stylesheet, программа-обработчик XML, если она, кроме того, является процессором XSLT, выполнит преоб­разование, заданное в файле simple.xsl. Преобразование заключается в выво­де содержимого элементов листинга 8.7 на стандартное устройство вывода, например, на консоль, без всякого форматирования.

Для того чтобы заставить процессоры делать отступы, нужно в элементе xsl: output записать атрибут indent:

<xsl:output method="text" encoding="CP866" indent="yes" />

Несложное форматирование вывода

Приведем пример чуть более развитой таблицы стилей. "Облагородим" вы­вод на консоль документа XML листинга 8.5, записав пробелы, перевод строки и поясняющие надписи. Все эти дополнительные символы, даже пробелы, записываются просто в содержимом элементов XSLT или в содер­жимом специального элемента xsl:text, причем символ перевода строки записывается в шестнадцатеричной форме строкой "&#хА" или просто "от­бивается" клавишей <Enter>.

Кроме того, мы выведем не только содержимое элементов документа XML, но и значения их атрибутов. Таблица стилей XSLT для такого преобразова­ния приведена в листинге 8.9.

Листинг 8.9. Таблица стилей XSLT для показа адресной книжки

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" encoding="UTF-8" />

<xsl:template match="person">

<xsl:apply-templates />

<xsl:text>&#xA;&#xA;</xsl:text>

</xsl:template>

<xsl:template match="name">

ФИО:

<xsl:value-of select="@first" /> <xsl:text> </xsl:text> <xsl:value-of select="@second" /> <xsl:text> </xsl:text> <xsl:value-of select="@surname" /> <xsl:text>&#xA;</xsl:text>

</xsl:template>

<xsl:template match="address">

<xs 1: text>Ajipec: < /xs 1: text>

<xsl:value-of select="street" /> <xsl:text>, </xsl:text> <xsl:value-of select="city" /> <xsl:text>, </xsl:text> <xsl:value-of select="zip" /> <xsl:text>&#xA;</xsl:text>

</xsl:template>

<xsl:template match="phone-list">

<xsl:text>CnMcoK телефонов:&#xA;</xsl:text>

<xsl:text>Pa6o4Me: </xsl:text>

<xsl:value-of select="work-phone" /> <xsl:text>, </xsl:text>

<xsl:text>&#xA;Домашние: </xsl:text>

<xsl:value-of select="home-phone" /> <xsl:text>, </xsl:text>

</xsl:template>

</xsl:stylesheet>

Как видите, основной элемент в таблице стилей — это элемент xsl: template, задающий шаблон отбора элементов для преобразования. В него вложены правила преобразования — элементы xsl:text, в которых записан выводи­мый поясняющий текст, и элементы xsl:vaiue-of, указьшающие, что надо преобразовать содержимое элемента или значение атрибута, имя которого записано в атрибуте select.

Обработка исходного дерева документа notebook начинается с выполнения правила:

<xsl:template match="person">

<xsl:apply-templates />

<xsl:text>&#xA;&#xA;</xsl:text>

</xsl:template>,

которое предписывает просмотреть все узлы-элементы person и применить к ним правила, записанные в его теле:

<xsl:apply-templates />

<xsl:text>&#xA;&#хА;</xsl:text>

Правило <xsl: apply-templates /> заключается в рекурсивном просмотре всех узлов-потомков узла person и применении к ним всех подходящих правил, записанных в таблице стилей.

Правило <xsl:text>&#xA;&#xA;</xsl:text> заставляет вставить пустую строку после вывода преобразованного элемента person.

Для окончательного оформления понадобится проверка наличия или отсутствия тех или иных узлов.

Включение таблицы стилей в документ XML

Таблицу стилей можно записывать не в отдельный файл, а непосредственно в преобразуемый документ XML. Для этого в элементе xsl:stylesheet предусмотрен атрибут-идентификатор id, на который можно ссылаться обычным образом из инструкции по обработке xml-styiesheet.

Листинг 8.11. Таблица стилей внутри документа XML

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

<?xml-stylesheet type="text/xsl" href="#simple"?>

<notebook>

<xsl:stylesheet version="1.0" id="simple"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" encoding="CP866" />

</xsl:stylesheet>

<person>

<name first="HBaH" зесопё="Петрович" surname="OmopoB" />

<address>

<street>CanoBaH, 12 — 34</street> <city>Hoвoкoзлoвcк</city> <zip>12332K/zip> </address>

<phone-list>

<work-phone>12 34 5 6</work-phone>

<home-phone>654321</home-phone> </phone-list>

</person>

<person>

<name first="MapMH" second="HBaHOBHa" зигname="Федорова" />

<address>

<street>IbcKHHH, 12</street> <city>3ape4eHCK</city> <zip>321123</zip> </address>

<phone-list>

<home-phone>2 2 4 32 К/home-phone> </phone-list>

</person>

</notebook>

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...