|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Работа с XML
Создание файлов XSLT рассмотрим на примере. Создайте в папке App_Data файл XML "Quotes.xml":
<?xml version="1.0" encoding="utf-8" ?>
<!--цитаты великих людей -->
<Quotes>
<Quote>
<Text>
Хотели как лучше, а получилось как всегда.</Text>
<Author>Виктор Черномырдин</Author>
</Quote>
<Quote>
<Text>Америка - континент, названный так потому, что его от-
крыл Колумб.</Text>
<Author>Жорж Элгози</Author>
</Quote>
<Quote>
<Text>Я прихожу в бешенство от одной мысли о том, сколько бы
я всего узнал, если бы не ходил в школу.</Text>
<Author>Джордж Бернард Шоу</Author>
</Quote>
<Quote>
<Text>Многое придумано для того, чтобы не думать.</Text>
<Author>Карел Чапек</Author>
</Quote>
<Quote>
<Text>Если скажешь правду, все равно рано или позно попадешь-
ся.</Text>
<Author>Оскар Уайльд</Author>
</Quote>
<Quote>
<Text>Быть ему президентом, если его до той поры не пове-
сят.</Text>
<Author>Марк Твен</Author>
</Quote>
</Quotes>Чтобы внести в выходной поток 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>В результате будут выводиться цитаты, разделенные горизонтальной линией.