Общие сведения о серверном веб-элементе управления XmlDataSource
Обновлен: Ноябрь 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="VB" %>
<!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>
<%@ 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.
Примечание. |
---|
Если задать выражение фильтрации XPath с помощью свойства XPath, фильтр будет применен после преобразования. |
В следующем примере кода показан элемент управления XmlDataSource и привязанный к нему элемент управления TreeView. В примере используются данные XML из предыдущего примера. Таблица стилей XSL, которая используется в этом примере, приведена после кода.
<%@ Page Language="VB" %>
<!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>
<%@ 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.
Важное примечание. |
---|
Рекомендуется присвоить свойству EnableCaching значение false, если включена реализация клиента, и исходный файл элемента управления XmlDataSource извлекается на основе учетной записи клиента. Если включено кэширование, кэшированные данные XML для одного пользователя могут просмотреть все пользователи, и конфиденциальные сведения могут быть предоставлены нежелательному источнику. Олицетворение клиента разрешается, когда атрибуту impersonate элемента конфигурации identity присваивается значение true, и на веб-сервере для данного приложения отключена анонимная идентификация. |
К началу
Примеры кода
Фильтрация данных с помощью элемента управления XmlDataSource
Привязка табличного элемента управления к элементу управления XmlDataSource
Пошаговое руководство. Создание веб-страниц для отображения XML-данных
К началу
Ссылки на классы
В таблице ниже перечислены ключевые классы, связанные с элементом управления XmlDataSource.
Член |
Описание |
---|---|
Основной класс элемента управления. |
К началу