Основы ASP.NET 2.0

       

Файлы преобразования документа


Известно, что для форматирования HTML-файлов часто используются CSS (Cascading Stylesheets), хотя это необязательно, так как браузеры соотносят со всеми тегами определенный внешний вид. Элемент <p> задает параграф, <B> — полужирный шрифт; браузер знает, как их показывать.

Поскольку XML не использует изначально заданные теги, их значение может быть каким угодно: <table> может означать таблицу HTML, а может и деревянный стол. Поэтому браузеры показывают XML-документы "как есть". Можно задать CSS-файлы и для XML-документов, но это не рекомендуется.

Для того чтобы задать формат отображения XML-документов, используются таблицы стилей XSL. XSL — расширяемый язык стилей (Extensible Stylesheet Language), он гораздо более богат возможностями, чем CSS. XSL — больше, чем просто таблица стилей.

Один и тот же файл XML можно связать с разными таблицами XSL, в том числе программно.

XSL состоит из трех частей:

  1. XSLT - метод преобразования XML-документов.
  2. XPath - метод задания частей и путей к элементам XML
  3. XSL Formatting Object - метод форматирования XML-документов.

Самая важная часть XSL - это язык преобразований XSLT (XSL Transformation). Он применяется для преобразования XSL-документов в другие типы документов или другие XSL-документы. Часто XSLT используется для преобразования XSL-документа в формат HTML.

Для того чтобы создать XSLT-документ, выберите в диалоге создания файла XSLT file. VS 2005 создает каркас таблицы стилей. Так как таблица стилей сама по себе является XML-документом, она начинается с декларации XML:


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

Тег xsl:stylesheet задает начало таблицы стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> </xsl:stylesheet>

Если вы изучали CSS, то знаете, что для задания стилей используются правила. Правило состоит из селектора и описания стиля в фигурных скобках.

a { font-size:medium; color:Fuchsia; }

Это правило определяет стиль вывода гиперссылок среднего размера шрифтом фиолетовым цветом.

В XSL применяются шаблоны. Для связывания шаблона с XML-элементом используется атрибут соответствия.

Тег xsl:template задает начало шаблона. Атрибут шаблона match="/"> связывает шаблон и корневой элемент исходного XML-документа:

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

В этот тег вложен шаблон HTML-файла. Комментарий напоминает о том, что туда нужно вставить XSL-элементы.



Чтобы внести в выходной поток XSLT-преобразования каждый XML-элемент, применяется тег XSL xsl:for-each. Элемент :for-each определяет местоположение элементов в XML-документе и повторяет шаблон для каждого из них:

<xsl:for-each select="Quotes/Quote"> </xsl:for-each>

Все, что находится в шаблоне, будет выводиться столько раз, сколько в исходном документе встретится элемент Quote, заключенный в тег Quotes.

Чтобы внести в выходной поток XSLT-преобразования значение XML-элемента, применяется тег XSL xsl:value-of:

<xsl:value-of select="Text"/> <hr/>

Данные можно отсортировать с помощью тега xsl:sort, который должен находиться внутри элемента xsl:for-each:

<xsl:sort select="Author" />

XSL может применять условия для показа и форматирования информации в зависимости от значений элементов. "Условный оператор" имеет вид <xsl:choose>, в который вложены элементы <xsl:when> и, возможно, <xsl:otherwise>. Условие задается в элементе <xsl:when> с помощью парамерта test:

<xsl:choose> <xsl:when test="Author='Марк Твен'"> <img src="http://www.tvkultura.ru/p/q_14406.jpg"></img> </xsl:when>

Окончательный вид файла трансформации:

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

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html> <body> <h1 style="background-color: RoyalBlue; color: white; font-size: 24pt; text-align: center; letter-spacing: 1.0em"> Известные цитаты </h1> <table border="0"> <tr style="font-size: 12pt; font-family: verdana; font-weight: bold"> <td style="text-align: center">Цитата</td> <td style="text-align: center">Автор</td> </tr> <xsl:for-each select="Quotes/Quote"> <xsl:sort select="Author" /> <tr style="font-size: 10pt; font-family: verdana"> <td> <xsl:value-of select="Text"/></td> <td> <xsl:choose> <xsl:when test="Author='Марк Твен'"> <img src="http://www.tvkultura.ru/ p/q_14406.jpg"></img> </xsl:when> <xsl:otherwise> <i><xsl:value-of select="Author"/></i> </xsl:otherwise> </xsl:choose> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>



Если хотите увидеть результат преобразования документа в браузере, включите после XML-декларации объявление

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

или выберите в меню XML пункт "Show XML Output" и определите файл преобразования.

Тот же самый XML-документ можно преобразовать с помощью другого XSL-файла:

<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h1 style="background-color: Brown; color: white; font-size: 24pt; text-align: center; letter-spacing: 1.0em"> Мастера Афоризма </h1> <xsl:for-each select="Quotes/Quote"> <xsl:value-of select="Text"/> <br/> <xsl:value-of select="Author"/> <hr width="70%"/> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>

В результате будут выводиться цитаты, разделенные горизонтальной линией.


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