Язык записи преобразований XSLT БРЕД, не стала разбираться, что из этого надо, а что нет
⇐ ПредыдущаяСтр 10 из 10 Одна из реализаций XML. По традиции, документ, записанный на языке XSLT, называется таблицей стилей (stylesheet), хотя его правильнее назвать документом, содержащим правила преобразований. Все элементы 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>

</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>
</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>
</xsl:text> </xsl:template> <xsl:template match="phone-list"> <xsl:text>CnMcoK телефонов:
</xsl:text>
<xsl:text>Pa6o4Me: </xsl:text> <xsl:value-of select="work-phone" /> <xsl:text>, </xsl:text> <xsl:text>
Домашние: </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>

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

</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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|