Опубликован: 14.11.2006 | Доступ: свободный | Студентов: 5897 / 532 | Оценка: 4.18 / 3.74 | Длительность: 16:37:00
ISBN: 978-5-9556-0085-7
Лекция 10:

Работа с XML

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >

Создание файлов 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>

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

< Лекция 9 || Лекция 10: 123456 || Лекция 11 >
Алексей Савельев
Алексей Савельев

https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx

Денис Прокофьев
Денис Прокофьев

Везде написано, что это самый независимый и простой в использовании навигационный элемент управления, что он работает сразу с web.sitemap и не требует определения SiteMapDataSource.

Моя карта сайта состоит из двух страниц, вложенных друг в друга. asp:Menu, asp:TreeView отбображаются как ожидалось, а вот asp:SiteMapPath - нет. Он не виден нигде. Однако на его месте формируется разметка: <span id="SiteMapPath1"><a href="#SiteMapPath1_SkipLink" style="position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden;">Проход по ссылкам навигации</a><a id="SiteMapPath1_SkipLink"></a></span> - т.е. элемент отрабатывает.

В словах xHTML это выглядит так: <asp:SiteMapPath ID="SiteMapPath1" runat="server" />. Причем не важно - внутри тега form или снаружи - всегда одинаково.

Т.к. другие нав. ЭУ работают через простой источник данных без ошибок, делаю вывод - карта составлена правильно. ИД: <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />

Карта: <?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/L11_1_simplePage.aspx" title="Страница 1"  description="Простая страница 1." >
    <siteMapNode url="~/L11_1SimplePage2.aspx" title="Страница 2"  description="Простая страница 2" />
  </siteMapNode>
</siteMap>

Почему так происходит? Вроде делаю все по примерам. VS Community 2015. NetFramework в проекте: v4.0.30319