共用方式為


XmlDataSource Web 伺服器控制項概觀

更新:2007 年 11 月

XmlDataSource 控制項讓資料繫結控制項能夠使用 XML 資料。您可用它來顯示階層式和表格式資料。XmlDataSource 控制項通常用於在唯讀情況下顯示階層式 XML 資料。

這個主題包含:

  • 背景

  • 程式碼範例

  • 類別參考

背景

XmlDataSource 會從使用 DataFile 屬性指定的 XML 檔案中載入 XML 資料。您也可以使用 Data 屬性從字串載入 XML 資料。

XmlDataSource 控制項會將 XML 項目的屬性公開為可資料繫結欄位。如果您想要繫結至不是屬性的值,可以使用 Extensible Sylesheet Language (XSL) 樣式表指定轉換。在控制項樣板中 (例如在 FormViewGridView 控制項中),您也可以使用 XPath 資料繫結函式將樣板中的控制項繫結至 XML 資料。如需使用 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 >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        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 >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        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>

使用 XmlDataSource 控制項轉換 XML 資料

如果您想要在資料繫結控制項顯示 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 >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        TransformFile="~/App_Data/names.xsl"
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        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 >
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" >
      <asp:XmlDataSource
        id="PeopleDataSource"
        
        TransformFile="~/App_Data/names.xsl"
        DataFile="~/App_Data/people.xml" />

      <asp:TreeView
        id="PeopleTreeView"
        
        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>

使用 XmlDataSource 控制項編輯 XML 資料

XmlDataSource 控制項通常用在資料繫結控制項顯示 XML 資料的唯讀資料案例中。但是,您也可以使用 XmlDataSource 編輯 XML 資料。請注意,使用其他資料來源控制項的自動更新、插入和刪除作業將無法運作。您必須撰寫自訂程式碼,使用 XmlDataSource 控制項修改資料。

若要編輯 XML 資料,請呼叫 GetXmlDocument 方法擷取 XmlDocument 物件,這是 XML 資料的 In-Memory 表示方式。接著您可以使用 XmlDocument 物件及其 XmlNode 物件所公開的物件模型,或是使用 XPath 運算式管理文件中的資料。當您對 XML 資料的 In-Memory 表示方式進行變更時,可以呼叫 Save 方法將資料儲存到磁碟。如此會完全覆寫磁碟上的 XML 檔案。

下列清單指出使用 XmlDataSource 控制項編輯 XML 資料的一些限制:

  • XML 資料必須從以 DataFile 屬性所指定的 XML 檔案中載入,而不是從 Data 屬性中指定的 XML 字串載入。

  • TransformTransformFile 屬性中不能指定任何 XSLT 轉換。

  • Save 方法不會處理不同要求的並行儲存作業。如果有一個以上的使用者使用 XmlDataSource 控制項編輯 XML 檔案,就無法保證所有的使用者都會使用相同的資料,而且不保證某個使用者不會覆寫其他使用者所做的變更。也因為其他使用者正在寫入 XML 檔案,並且在檔案上設定獨佔鎖定,而可能使得 Save 作業失敗。

使用 XmlDataSource 控制項篩選 XML 資料

根據預設,XmlDataSource 控制項會公開 DataFileData 屬性指定的所有 XML 資料。但是,您可以使用 XPath 運算式篩選資料。XPath 屬性可以讓您指定在載入 XML 資料後要套用的 XPath 篩選條件運算式,並且已經套用任何轉換。如需範例,請參閱使用 XmlDataSource 控制項篩選資料

使用 XmlDataSource 控制項快取 XML 資料

XmlDataSource 控制項通常會搭配 XML 檔案使用,並且在每次要求網頁時都開啟和讀取 XML 檔案會影響應用程式的效能。因此,預設會啟用 XmlDataSource 控制項的快取。快取可以讓您在消耗 Web 伺服器上記憶體的同時,降低伺服器上的處理負載。在大部分情況下這是可接受的折衝方式。當 EnableCaching 屬性設定為 true 時 (這是預設值.),XmlDataSource 控制項會快取資料。您可以將 CacheDuration 屬性設定為控制項應該快取資料的秒數。您可以使用 CacheExpirationPolicy 微調 XmlDataSource 控制項的快取行為。

重要事項:

當啟用用戶端模擬,並且根據用戶端識別擷取 XmlDataSource 控制項的原始程式檔時,建議您將 EnableCaching 屬性設定為 false。如果啟用快取,所有使用者都能夠檢視某一使用者的快取 XML 資料,而使得敏感資訊可能會公開至不必要的來源。當識別組態項目的 impersonate 屬性設定為 true,並且 Web 伺服器上的應用程式已停用匿名識別時,就會啟用用戶端模擬。

回到頁首

程式碼範例

使用 XmlDataSource 控制項篩選資料

繫結表格式控制項至 XmlDataSource 控制項

逐步解說:建立可以顯示 XML 資料的 Web 網頁

回到頁首

類別參考

下表列出與 XmlDataSource 控制項相關的重要類別。

成員

描述

XmlDataSource

控制項的主要類別。

回到頁首

請參閱

參考

XML Web 伺服器控制項概觀