ASP.NET - XmlDataSource Web 服务器控件概述

XmlDataSource 控件使得 XML 数据可用于数据绑定控件。可以使用该控件同时显示分层数据和表格数据。在只读情况下,XmlDataSource 控件通常用于显示分层 XML 数据。

一、说明

XmlDataSource 从使用 DataFile 属性指定的 XML 文件加载 XML 数据。另外,还可以从使用 Data 属性的字符串加载 XML 数据。

XmlDataSource 控件将 XML 元素的属性公开为可绑定数据的字段。如果要绑定非属性的值,则可以使用可扩展样式表语言 (XSL) 样式表指定转换。在 FormView GridView 等控件模板中,您还可以使用 XPath 数据绑定功能将模板中的控件绑定到 XML 数据。

下面的代码示例演示一个 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 >

<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>

1、使用 XmlDataSource 控件转换 XML 数据

如果要在使用数据绑定控件显示 XML 数据之前转换 XML 数据,您可以为 XmlDataSource 控件提供可扩展样式表语言 (XSL) 样式表。如 XML 数据一样,您通常从使用 TransformFile 属性指定的文件加载样式表。但是,您还可以直接从使用 Transform 属性的字符串加载样式表。

要提供转换期间 XSL 样式表使用的动态 XSLT 样式表参数,您可以设置 TransformArgumentList 属性。

说明: 如果使用 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 >

<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>

2、使用 XmlDataSource 控件编辑 XML 数据

XmlDataSource 控件一般用于只读数据方案,在这种方案下数据绑定控件显示 XML 数据。但是,您还可以使用 XmlDataSource 编辑 XML 数据。注意,使用其他数据源控件的自动更新、插入和删除操作不会正常工作。必须要使用 XmlDataSource 控件编写自定义代码才能对数据进行修改。

若要编辑 XML 数据,请调用 GetXmlDocument 方法检索 XmlDocument 对象,该对象是 XML 数据在内存中的表示形式。然后可以使用由 XmlDocument 对象及其 XmlNode 对象公开的对象模型,或者可以使用 XPath 表达式来操作文档中的数据。当您对内存中的 XML 数据进行更改之后,可以通过调用 Save 方法将这些数据保存到磁盘。这样会覆盖磁盘上的整个 XML 文件。

下面的列表指出了使用 XmlDataSource 控件编辑 XML 数据的某些限制:

·加载 XML 数据时必须从使用 DataFile 属性指定的 XML 文件进行加载,而不能从 Data 属性中指定的 XML 的字符串进行加载。

·在 Transform TransformFile 属性中不能指定任何 XSLT 转换。

·Save 方法不会同时处理不同请求的保存操作。如果有多个用户使用 XmlDataSource 控件编辑 XML 文件,既不能保证所有用户会对相同数据进行操作,也不能保证某个用户不会覆盖另一个用户所做的更改。另外,也可能因为另一个用户正在写入 XML 文件而且文件上有专用锁,而发生无法执行 Save 操作的情况。

3、使用 XmlDataSource 控件筛选 XML 数据

默认情况下,XmlDataSource 控件公开由 DataFile Data 属性指定的所有 XML 数据。但是,可以使用 XPath 表达式对数据进行筛选。使用 XPath 属性可以指定 XPath 筛选器表达式,加载 XML 数据后对 XML 数据应用任何转换时需要应用该表达式。

4、使用 XmlDataSource 控件缓存 XML 数据

XmlDataSource 控件通常与 XML 文件一起使用,每次因为请求页而打开并读取 XML 文件都会对应用程序的性能有影响。因此,默认情况下应对 XmlDataSource 控件启用缓存。通过缓存可以减低服务器的处理负荷,代价是要占用 Web 服务器的内存;多数情况下这是一种可接受的折中方案。当 EnableCaching 属性默认设置为 true XmlDataSource 控件可以缓存数据。另外,可以将 CacheDuration 属性设置为该控件应缓存数据的秒数。您可以使用 CacheExpirationPolicy 微调 XmlDataSource 控件的缓存行为。

重要说明: 建议在启用了客户端模拟并且根据客户端标识检索 XmlDataSource 控件的源文件时,将 EnableCaching 属性设置为 false。如果启用了缓存,则单个用户的缓存 XML 数据会被所有用户看到,并且敏感信息可能会公开给有害源。如果 identity 配置元素的 impersonate 属性设置为 true 且对 Web 服务器上的应用程序禁用匿名标识,则说明启用了客户端模拟。

二、XmlDataSource

XmlDataSource 控件是向数据绑定控件提供 XML 数据的数据源控件。数据绑定控件可以使用该 XmlDataSource 控件来显示分层数据和表格数据。XmlDataSource 控件通常用于显示只读方案中的分层 XML 数据。由于 XmlDataSource 控件扩展了 HierarchicalDataSourceControl 类,因此可使用分层数据。XmlDataSource 控件也实现 IDataSource 接口,使用表格(或列表样式)数据。

说明: 出于安全目的,任何 XmlDataSource 控件属性都不以视图状态存储。由于技术上可以在客户端对视图状态的内容进行解码,因此存储有关数据结构或其内容的敏感信息可能会带来信息泄露的风险。请注意,如果需要以视图状态存储 XPath 属性之类的信息,可以在 @ Page 指令中设置 ViewStateEncryptionMode,从而启用加密来保护内容。

使用数据绑定控件时,页面开发人员使用 XmlDataSource 控件显示 XML 数据。

XmlDataSource 通常从 DataFile 属性指定的 XML 文件中加载 XML 数据。也可以使用 Data 属性,由数据源控件将 XML 数据直接存储为字符串形式。如果要在数据绑定控件显示 XML 数据前转换它,可提供可扩展样式表语言 (XSL) 样式表进行转换。和 XML 数据一样,通常从 TransformFile 属性指示的文件中加载样式表,而使用 Transform 属性将其直接存储为字符串形式。

XmlDataSource 控件通常用于由数据绑定控件显示 XML 数据的只读数据方案中。但也可以使用 XmlDataSource 控件来编辑 XML 数据。若要编辑 XML 数据,请调用 GetXmlDocument 方法来检索 XmlDataDocument 对象,该对象是 XML 数据在内存中的表示形式。可以使用由 XmlDataDocument 公开的对象模型及其所包含的 XmlNode 对象或使用 XPath 筛选表达式来操作文档中的数据。更改 XML 数据在内存中的表示形式后,可以调用 Save 方法将其保存到磁盘中。

XmlDataSource 控件的编辑功能有一些限制:

·必须从 DataFile 属性指示的 XML 文件中加载 XML 数据,而不是从 Data 属性中指定的内联 XML 中加载。

·在 Transform TransformFile 属性中无法指定 XSLT 转换。

·Save 方法不处理由不同请求产生的并发保存操作。如果多个用户同时通过 XmlDataSource 编辑一个 XML 文件,则不能保证所有用户都在操作相同的数据。由于同样的并发问题,也可能导致 Save 操作失败。

XML 数据所执行的常用操作是将其从一个 XML 数据集转换到另一个数据集。XmlDataSource 控件支持使用 Transform TransformFile 属性(在将 XML 数据传递到数据绑定控件之前,指定 XSL 样式表并应用于该 XML 数据),以及 TransformArgumentList 属性(转换期间能够提供由 XSL 样式表使用的动态 XSLT 样式表参数)进行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值