Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Садовая, 12—34 Пушкин 123456654321 Нижняя, 123ареченск 321123224321



 

Некоторые процессоры XSLT вставляют пробел между содержимым элементов или делают перевод на следующую строку после вывода содержимого каждого элемента. Более "умные" процессоры XSLT могут пойти дальше и сделать отступы, показывающие уровень вложенности элементов. Для того чтобы заставить и прочие процессоры делать отступы, нужно в элементе xsl:output записать атрибут indent:

 

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

 

Прочие дополнительные символы (пробел, символ перевода строки) записываются просто в содержимом элементов XSLT или в содержимом специального элемента xsl:text, причем символ перевода строки записывается в шестнадцатеричной форме строкой "&#хА;" или просто "отбивается" клавишей Enter.

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

 

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

<xsl:stylesheet version="l.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">

<xsl:text> Aдрес; </xsl: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> Список телефонов:&#xA; </xsl:text>

<xsl:text> Pa6oчиe: </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:appiy-tempiates /> заключается в рекурсивном просмотре всех узлов-потомков узла person и применении к ним всех подходящих правил, записанных в таблице стилей (листинг 2.7) в элементах <xsl:template match="…">  для улов name, address, phone-list.

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

Вывод в свое окно результата преобразования документ notebook . xml, сделанного XSLT-процессором Xselerator с помощью таблицы стилей simple _2. xsl, показан:

 

ФИО: Иван Петрович Сидоров

Адрес: Садовая, 12 — 34, Пушкин, 123321

Список телефонов:

Рабочие: 123456,

Домашние: 654321,

ФИО: Мария Ивановна Федорова

Адрес: Нижняя, 12, Зареченск, 321123

Список телефонов:

Рабочие:,

Домашние: 224321,

 

Это ещё недостаточно хороший вывод: в списке телефонов появляются лишние запятые, слово "Рабочие" выводится, даже если в списке номеров телефонов нет ни одного рабочего телефона. Для более качественного оформления нужна проверка наличия или отсутствия тех или иных узлов. Средства такой проверки в XSLT есть.

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 237; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.012 с.)
Главная | Случайная страница | Обратная связь