Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Использование шаблонов





Рассмотрим следующий XML-документ (полные тексты в прилагаемых файлах):

Пример 16.

XML-документ в примере содержит 2 типа контейнеров. Первый – Captions – содержит заголовки для организации «красивого» вывода:

<Captions>

<Caption> Моя библиотека </Caption>

<CaptionTitle> Название </CaptionTitle>

</Captions>

Второй – Book – содержит описание книги:

<Book>

<dc:title> Война и мир </dc:title>

</Book>

Описание автора – creator – в свою очередь представлено в виде контейнера:

<dc:creator>

<vCard:N>

<vCard:Family>Пушкин</vCard:Family>

<vCard:Given> Александр </vCard:Given>

<vCard:Other> Сергеевич </vCard:Other>

</vCard:N>

</dc:creator>

Так же в примере указаны 2 пространства имен:

<Library xmlns:dc="http://purl.org/dc/elements/1.1/"

xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" >

xmlns:dc – указвающее на применение схемы метаданных Dublin Core и – xmlns:vCard – указвающее на применение схемы метаданных VisitCard. Оба пространства имен должны быть тоже указаны и в XSL-документах.

Сначала рассмотрим простые варианты XSL-преобразований, без использования нескольких шаблонов. Первый вариант – простое XSL-преобразование:

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

<xsl:stylesheet version="1.0"

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

xmlns:dc="http://purl.org/dc/elements/1.1/"

xmlns:vCard="http://www.w3.org/2001/vcard-rdf/3.0#" >

<xsl:template match="/">

<xsl:value-of select="Library/Book/dc:title"/><br/>

<xsl:value-of select="Library/Book/dc:creator"/><br/>

</xsl:template>

</xsl:stylesheet>

В этом примере используется только один шаблон – соответствующий корневому элементу, и обрабатывается только один контейнер – <Book>. Так как неиспользуется ни оператор цикла и ни какие другие средства, то на экран выводится содержимое только первого элемента <Book>. В XSL-элементе указывается имя контейнера <dc:creator> и поэтому выводится на экран сразу все содержимое. В корневом элементе xsl:stylesheet указаны те же пространства имен, что и в XML-документе

Второй вариант – с использованием XSL-элемента for-each:

<xsl:template match="/"> <xsl:for-each select="Library/Book"> <xsl:value-of select="dc:title"/> <br/> <xsl:value-of select="dc:creator"/> <br/> … </xsl:for-each> </xsl:template> Применение XSL-элемента for-each позволяет вывести на экран все содержимое XML-документа. Так как основные XSL-элементы остались без изменения, то и вид отображения на экране остался как в предсдущем варианте. Третий вариант – с использованием XSL-элемента for-each, но вывод оформляется в виде таблицы. В первой строке таблицы выводятся заголоки столбцов из контейнера Captions:

<tr bgcolor="#CCCCCC">

<td align="center">

<xsl:value-of select="Library/Captions/CaptionTitle"/>

</td>

<td align="center">

<xsl:value-of select="Library/Captions/CaptionCreator"/>

</td>

</tr>

В этот вариант включена сортировка по авторам:

<xsl:for-each select="Library/Book">

<xsl:sort select="dc:creator" />

<tr>

<td><xsl:value-of select="dc:title"/></td>

<td><xsl:value-of select="dc:creator"/></td>

</tr>

</xsl:for-each>

Так как в XML-документе используется кодовое обозначения языка документа, то для вывода используется условный элемент xsl:if:

<td><xsl:if test="dc:language='ru'">

<i>русский</i>

</xsl:if></td>

Вид XML-документа с этим вариантом XSL-преобразования:

 

Как уже было указано выше, XSL-документ может содержать один или несколько шаблонов. Атрибут match шаблона указывает на ветвь, которая в нем обрабатывается. XSL-документ должен содержать один и только один шаблон, представляющий корневой элемент XML-документа, то есть шаблон с атрибутом match="/".

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

Шаблон для контейнера Library/Book:

<xsl:template match="Library/Book">

<tr>

<td><xsl:value-of select="dc:title"/></td>

<td><xsl:apply-templates select='dc:creator/vCard:N'/></td>

<td><xsl:value-of select="dc:description"/></td>

</tr>

</xsl:template>

В атрибуте match указывается полное имя контейнера, для которого написан шаблон. В теле шаблона, как и в теле элемента for-each, во всех XSL-элементах указывается только имена дочерних XML-элементов контейнера, без указания имени шаблона. Для вызова шаблона используется следующий XSL-элемент:

<xsl:apply-templates select='Library/Book'>

<xsl:sort order="descending" select="dc:title"/>

</xsl:apply-templates>

В приведенном элементе apply-templates атрибут select играет роль имени шаблона, по этому имени определяется какой шаблон нужно использовать. Шаблон применяется ко всем элементам, встречающимся в XML-документе, то есть шаблон очень похож на элемент цикла for-each, в том числе можно использовать и сортировку. В приведенном примере осуществляется сортировка по названию (элемент title) в порядке убывания.

Шаблон для контейнера vCard:N:

<xsl:template match="Library/Book/dc:creator/vCard:N">

<i><xsl:value-of select="vCard:Family"/></i><br/>

<xsl:value-of select="vCard:Given"/><br/>

<xsl:value-of select="vCard:Other"/><br/>

</xsl:template>

Для вызова шаблона используется следующий XSL-элемент:

<xsl:apply-templates select='dc:creator/vCard:N'/>

Так как этот шаблон вызывается из другого, то в атрибуте select указывается не полное имя контейнера, а в соответствии с правилами записи имен XML-элементов внутри шаблона и цикла, XSL сам расширяет имя до полного.

Ниже приводится окно браузера с получившимся преобразованием. Изменение цвета фона ячеек таблицы достигается использованием следующих XSL-элементов:

<td>

<xsl:if test="position() mod 2 = 0">

<xsl:attribute name="bgcolor">yellow</xsl:attribute>

</xsl:if>

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

</td>

Элемент xsl:attribute добавляет к HTML-тегу <td> атрибут bgcolor и указывает его значение – yellow. В условном элементе определяется является ли строка четной.

 

В шаблонах и в элементе for-each имеется возможность вставлять условия фильтрации, которые позволяют ограничить число выводимых элементов. В следующем примере использован элемент:

<xsl:for-each select=

"Library/Book[dc:creator/vCard:N/vCard:Family='Пушкин']">

Условие dc:creator/vCard:N/vCard:Family='Пушкин' определяет что в выходной поток попадут только те элементы контейнера Book в которых фамилия автора – Пушкин.







Дата добавления: 2015-09-07; просмотров: 488. Нарушение авторских прав; Мы поможем в написании вашей работы!




Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...


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


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Решение Постоянные издержки (FC) не зависят от изменения объёма производства, существуют постоянно...

ТРАНСПОРТНАЯ ИММОБИЛИЗАЦИЯ   Под транспортной иммобилизацией понимают мероприятия, направленные на обеспечение покоя в поврежденном участке тела и близлежащих к нему суставах на период перевозки пострадавшего в лечебное учреждение...

Кишечный шов (Ламбера, Альберта, Шмидена, Матешука) Кишечный шов– это способ соединения кишечной стенки. В основе кишечного шва лежит принцип футлярного строения кишечной стенки...

Способы тактических действий при проведении специальных операций Специальные операции проводятся с применением следующих основных тактических способов действий: охрана...

Искусство подбора персонала. Как оценить человека за час Искусство подбора персонала. Как оценить человека за час...

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

Studopedia.info - Студопедия - 2014-2025 год . (0.013 сек.) русская версия | украинская версия