Общие сведения о серверном веб-элементе управления XmlDataSource

Visual Studio 2010

Обновлен: Ноябрь 2007

Элемент управления XmlDataSource предоставляет элементам управления доступ с привязкой к данным XML. С его помощью можно отображать как иерархические, так и табличные данные. Обычно элемент управления XmlDataSource используется для отображения иерархических данных XML, доступных только для чтения.

В этом разделе рассматриваются следующие темы:

Элемент управления XmlDataSource загружает данные XML из XML-файла, указанного с помощью свойства DataFile. Данные XML можно также загружать из строки с помощью свойства Data.

Элемент управления XmlDataSource показывает атрибуты элементов XML в виде полей, которые можно привязать к данным. Если нужно привязаться к значениям, которые не являются атрибутами, можно задать преобразование с помощью таблицы стилей XSL. В шаблонах элементов управления, таких как FormView или GridView, можно также привязать элемент управления к данным XML с помощью функции привязки данных XPath. Дополнительные сведения о выражении XPath см. в разделе Привязка табличного элемента управления к элементу управления XmlDataSource.

В следующем примере кода показан элемент управления XmlDataSource и привязанный к нему элемент управления TreeView. После примера кода приведен исходный XML-файл.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:XmlDataSource
        id="PeopleDataSource"
        runat="server"
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        runat="server"
        DataSourceID="PeopleDataSource">
        <DataBindings>
          <asp:TreeNodeBinding DataMember="LastName"    TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="FirstName"   TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Street"      TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="City"        TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Region"      TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="ZipCode"     TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Title"       TextField="#InnerText" />
          <asp:TreeNodeBinding DataMember="Description" TextField="#InnerText" />
        </DataBindings>
      </asp:TreeView>

    </form>
  </body>
</html>


Ниже приведен пример данных XML, которые использовались для предыдущего примера кода.

<?xml version="1.0" encoding="utf-8" ?>
<People>
  <Person>
    <Name>
      <FirstName>Manoj</FirstName>
      <LastName>Syamala</LastName>
    </Name>
    <Address>
      <Street>345 Maple St.</Street>
      <City>Redmond</City>
      <Region>WA</Region>
      <ZipCode>01434</ZipCode>
    </Address>
    <Job>
      <Title>CEO</Title>
      <Description>Develops company strategies.</Description>
    </Job>
  </Person>

  <Person>
    <Name>
      <FirstName>Jared</FirstName>
      <LastName>Stivers</LastName>
    </Name>
    <Address>
      <Street>123 Elm St.</Street>
      <City>Seattle</City>
      <Region>WA</Region>
      <ZipCode>11223</ZipCode>
    </Address>
    <Job>
      <Title>Attorney</Title>
      <Description>Reviews legal issues.</Description>
    </Job>
  </Person>

  <Person>
    <Name>
      <FirstName>Karina</FirstName>
      <LastName>Agerby</LastName>
    </Name>
    <Address>
      <Street>34 Palm Avenue</Street>
      <City>Renton</City>
      <Region>WA</Region>
      <ZipCode>63910</ZipCode>
    </Address>
    <Job>
      <Title>IT Director</Title>
      <Description>In charge of corporate network.</Description>
    </Job>
  </Person>
</People>

Преобразование данных XML с помощью элемента управления XmlDataSource

Если перед тем как элемент управления с привязкой к данным покажет данные XML, эти данные необходимо преобразовать, для элемента управления XmlDataSource можно предоставить таблицу стилей на языке XSL. Как и в случае с данными XML, эта таблица стилей обычно загружается из файла, указанного с помощью свойства TransformFile. Однако ее также можно загрузить со строки с помощью свойства Transform.

Для того чтобы в ходе преобразования в таблице стилей XSL использовались аргументы таблицы стилей XSLT, можно соответствующим образом задать значение свойства TransformArgumentList.

494y92bs.alert_note(ru-ru,VS.100).gifПримечание.

Если задать выражение фильтрации XPath с помощью свойства XPath, фильтр будет применен после преобразования.

В следующем примере кода показан элемент управления XmlDataSource и привязанный к нему элемент управления TreeView. В примере используются данные XML из предыдущего примера. Таблица стилей XSL, которая используется в этом примере, приведена после кода.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:XmlDataSource
        id="PeopleDataSource"
        runat="server"
        TransformFile="~/App_Data/names.xsl"
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        runat="server"
        DataSourceID="PeopleDataSource">
        <DataBindings>
          <asp:TreeNodeBinding DataMember="Name"   TextField="#InnerText" />
        </DataBindings>
      </asp:TreeView>

    </form>
  </body>
</html>


Ниже приведен пример таблицы стилей XSL, которая использовалась в предыдущем примере кода.

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

<xsl:template match="People">
  <Names>
    <xsl:apply-templates select="Person"/>
  </Names>
</xsl:template>

<xsl:template match="Person">
  <xsl:apply-templates select="Name"/>
</xsl:template>

<xsl:template match="Name">
  <name><xsl:value-of select="LastName"/>, <xsl:value-of select="FirstName"/></name>
</xsl:template>

</xsl:stylesheet>

Изменение данных XML с помощью элемента управления XmlDataSource

Обычно элемент управления XmlDataSource используется в сценариях с доступом к данным только для чтения, в которых данные XML отображаются с помощью элемента управления с привязкой к данным. Однако с помощью элемента управления XmlDataSource можно также редактировать данные XML. Обратите внимание, что автоматические операции обновления, вставки и удаления, которые работают для других источников данных, в этом случае не работают. Необходимо написать собственный код для изменения данных с помощью элемента управления XmlDataSource.

Чтобы изменить данные XML, вызовите метод GetXmlDocument для извлечения объекта XmlDocument, который является внутренним представлением данных XML в памяти. Затем с помощью объектной модели, представленной объектом XmlDocument и содержащимися в нем объектами XmlNode, или с помощью выражения XPath можно выполнять различные действия с данными в документе. После внесения изменений во внутреннее представление данных XML в памяти эти данные можно сохранить на диске, вызвав метод Save. В результате XML-файл на диске будет полностью перезаписан.

В списке ниже перечислены некоторые ограничения на изменение данных XML с помощью элемента управления XmlDataSource.

  • Данные XML должны загружаться из XML-файла, заданного свойством DataFile, а не из строки XML, заданных в свойстве Data.

  • В свойствах Transform или TransformFile нельзя задавать преобразование XSLT.

  • Метод Save не обрабатывает параллельные операции сохранения по различным запросам. Если несколько пользователей изменяют XML-файл с помощью элемента управления XmlDataSource, нет гарантии, что все они работают с одними и теми же данными, и что один пользователь не перезапишет изменения, внесенные другим пользователем. Также не исключен сбой операции Save из-за того, что другой пользователь как раз производит запись в XML-файл и монопольно его заблокировал.

Фильтрация данных XML с помощью элемента управления XmlDataSource

По умолчанию элемент управления XmlDataSource показывает все данные XML, указанные свойствами DataFile и Data. Однако эти данные можно фильтровать с помощью выражения XPath. Свойство XPath позволяет задать критерий фильтра XPath, который будет применяться после загрузки и всех преобразований данных XML. Пример см. в разделе Фильтрация данных с помощью элемента управления XmlDataSource.

Кэширование данных XML с помощью элемента управления XmlDataSource

Элемент управления XmlDataSource обычно используется совместно с XML-файлом, и открытие и чтение этого файла при каждом запросе страницы может привести к снижению производительности приложения. Поэтому для элемента управления XmlDataSource по умолчанию кэширование включено. Кэширование позволяет снизить загрузку сервера операциями обработки за счет использования памяти веб-сервера. В большинстве случаев этот компромисс оказывается приемлемым. Элемент управления XmlDataSource кэширует данные, если свойству EnableCaching присвоено значение true, которое является значением по умолчанию. Свойству CacheDuration присваивается выраженный в секундах промежуток времени, в течение которого элемент управления должен кэшировать данные. С помощью свойства CacheExpirationPolicy можно дополнительно настроить поведение элемента управления XmlDataSource.

494y92bs.alert_caution(ru-ru,VS.100).gifВажное примечание.

Рекомендуется присвоить свойству EnableCaching значение false, если включена реализация клиента, и исходный файл элемента управления XmlDataSource извлекается на основе учетной записи клиента. Если включено кэширование, кэшированные данные XML для одного пользователя могут просмотреть все пользователи, и конфиденциальные сведения могут быть предоставлены нежелательному источнику. Олицетворение клиента разрешается, когда атрибуту impersonate элемента конфигурации identity присваивается значение true, и на веб-сервере для данного приложения отключена анонимная идентификация.

К началу

В таблице ниже перечислены ключевые классы, связанные с элементом управления XmlDataSource.

Член

Описание

XmlDataSource

Основной класс элемента управления.

К началу

Показ: