Опубликован: 14.11.2006 | Уровень: для всех | Доступ: платный
Лекция 10:

Работа с XML

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

Класс XPathDocument

Класс обеспечивает чтение и хранение в памяти XML-документов для трансформаций с помощью XSL. По документу можно перемещаться в любом направлении и получать произвольный доступ к любому элементу, используя выражения XPath.

Возьмем XML-документ "Quotes.xml" и файл трансформации XSL "Quotes.xsl". В выходной поток страницы будет направлен результат преобразования XML -документа:

<%
        XPathDocument doc =
          new XPathDocument(Server.MapPath("App_Data\\Quotes.xml"));
              XslCompiledTransform xsl = new XslCompiledTransform();
              xsl.Load(Server.MapPath("App_Data\\Quotes.xsl"));
              xsl.Transform(doc, null, Response.OutputStream); %>

Благодаря тому, что в файле трансформации определены табличные теги, на странице появится таблица с нужной информацией.

Элемент управления XML

Элемент управления XML предоставляет способ преобразовать XML-документ, используя таблицу стилей XSL. Свойство DocumentSource позволяют задать XML-файл, в котором находятся данные, а TransformSource — файл трансформации XSLT.

В предыдущем примере того же результата можно достичь, если поставить на странице элемент управления XML:

<asp:Xml ID="Xml1" runat="server" 
DocumentSource="~/App_Code/Quotes.xml" TransformSource="~/App_Data 
/Quotes.xsl"></asp:Xml>

XMLDataSource

Элемент-источник данных XMLDataSource обеспечивает простой способ подключения XML-документов как источников данных к элементам, отображающим информацию. Также можно задать запрос XPath для того, чтобы отфильтровать данные. Как и SqlDataSource, он позволяет редактировать, удалять, добавлять записи данных. Для этого нужно получить доступ к находящемуся в нем объекту XmlDataDocument с помощью вызова метода GetXmlDocument. После редактирования документ сохраняется с помощью метода Save.

В отличие от табличных данных в СУБД, данные в XML-файлах иерархичны, поэтому XMLDataSource удобно привязывать к иерархичным элементам управления, например, Menu.

Синтаксис привязки к данным XML

Так как в приложениях XML-данные используются все чаще и чаще, был введен метод привязки данных, полученных из XMLDataSource.

Эти методы работают так же, как Bind и Eval, которые обсуждались в "лекции 7" :

<% XPathBinder.Eval(Container.DataItem, "name"); %>

Как и при связывании с помощью SQLDataSource, можно сокращенно писать

<%# XPath("name")%>

Так же как и у DataBinder, метод Eval класса XPathBinder поддерживает строки форматирования:

<% XPath("employees/employee/HireDate", "{0:mm dd yyyy}") %>

Применим этот синтаксис в элементе DataList, который получает данные из источника данных XmlDataSource:

<asp:XmlDataSource ID="XmlDataSource1" runat="server" 
DataFile="~/nobel.xml" XPath="//nobel/literature/writer">
</asp:XmlDataSource>

<asp:DataList ID="DataList1" DataSourceID="XmlDataSource1" 
runat="server">
    <ItemTemplate>
         <p>
             <%# XPath("name")%>  получил премию по литературе в
             <%# XPath("winningdate")%>
             за произведение <%# XPath("work")%></b>
        </p>
    </ItemTemplate>
</asp:DataList>

Заключение

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

< Лекция 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

Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008
Akiyev Begench
Akiyev Begench
Беларусь, Полоцк, полоцкий государственный университет