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>
В результате будут выводиться цитаты, разделенные горизонтальной линией.