XmlDataSource Web サーバー コントロールの概要

更新 : 2007 年 11 月

XmlDataSource コントロールは、XML データをデータ バインド コントロールで使用できるようにします。このコントロールを使用すると、データを階層形式と表形式の両方で表示できます。XmlDataSource コントロールは、通常、データの変更が発生しない場合に、階層構造の XML データを表示するために使用されます。

このトピックの内容は次のとおりです。

  • 背景

  • コード例

  • クラス リファレンス

背景

XmlDataSource は、DataFile プロパティを使用して指定された XML ファイルから XML データを読み込みます。XML データは、Data プロパティを使用して文字列から読み込むこともできます。

XmlDataSource コントロールは、データ バインド可能なフィールドとして XML 要素の属性を公開します。属性ではない値にバインドする場合は、XSL (Extensible Sylesheet Language) スタイル シートを使用して変換を指定します。FormView コントロール、GridView コントロールなどのコントロール テンプレートでは、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 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>

XmlDataSource コントロールによる XML データの変換

データ バインド コントロールによって XML データを表示する前に変換する必要がある場合は、XmlDataSource コントロールに XSL (Extensible Sylesheet Language) スタイル シートを提供します。スタイル シートは、XML データと同様に、一般に TransformFile プロパティを使用して指定するファイルから読み込みます。ただし、Transform プロパティを使用して、スタイル シートを文字列から直接読み込むこともできます。

変換中に動的 XSLT スタイル シートの引数を XSL スタイル シートに提供する場合は、TransformArgumentList プロパティを設定します。

494y92bs.alert_note(ja-jp,VS.90).gifメモ :

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>

XmlDataSource コントロールによる XML データの編集

XmlDataSource コントロールは、データ バインド コントロールが XML データを表示する読み取り専用のデータ シナリオで一般的に使用します。ただし、XmlDataSource を使用して XML データを編集することもできます。他のデータ ソース コントロールを使用する自動的な更新、挿入、および削除操作は実行できません。XmlDataSource コントロールを使用してデータを変更するカスタム コードを記述する必要があります。

XML データを編集する場合は、GetXmlDocument メソッドを呼び出して、メモリ内の XML データ表現である XmlDocument オブジェクトを取得します。次に、XmlDocument オブジェクトおよびその XmlNode オブジェクトが公開するオブジェクト モデルを使用できます。または XPath 式を使用してドキュメントのデータを操作できます。メモリ内の XML データの表現を変更した場合は、Save メソッドを呼び出してディスクにデータを保存できます。これによって、ディスクの XML ファイル全体を上書きできます。

次の一覧に、XmlDataSource コントロールを使用して XML データを編集する際の制限の一部を示します。

  • XML データは、Data プロパティに指定されている XML 文字列ではなく、DataFile プロパティに指定されている XML ファイルから読み込む必要があります。

  • Transform プロパティまたは TransformFile プロパティで XSLT 変換を指定することはできません。

  • Save メソッドは、複数の要求による同時保存は処理できません。複数のユーザーが XmlDataSource コントロールを使用して XML ファイルを編集する場合、すべてのユーザーが同じデータを操作していることは保証されません。また、別のユーザーが変更内容を上書きする可能性もあります。別のユーザーが XML ファイルに書き込み中で排他的なロックを持っているために、Save 操作が失敗することもあります。

XmlDataSource コントロールによる XML データのフィルタ処理

既定では、XmlDataSource コントロールは DataFile プロパティまたは Data プロパティによって指定されるすべての XML データを公開します。ただし、XPath 式を使用してデータをフィルタできます。XPath プロパティを使用すると、XML データが読み込まれ、すべての変換が適用された後に適用される XPath フィルタ式を指定できます。カスタマイズ例については、「XmlDataSource コントロールによるデータのフィルタ処理」を参照してください。

XmlDataSource コントロールによる XML データのキャッシュ

XmlDataSource コントロールは一般に XML ファイルと共に使用され、ページが要求されるたびに XML ファイルが開かれて読み込まれるため、アプリケーションのパフォーマンスに影響します。したがって、XmlDataSource コントロールには、既定でキャッシュが有効になっています。キャッシュによってサーバーの処理負荷は軽減されますが、Web サーバー上のメモリは消費されます。ただし、ほとんどの場合、これは許容範囲のトレードオフです。XmlDataSource コントロールは、既定で EnableCaching プロパティが true に設定されている場合にデータをキャッシュします.。CacheDuration プロパティは、コントロールがデータをキャッシュする秒数に設定します。CacheExpirationPolicy を使用すると、XmlDataSource コントロールのキャッシュ機能をさらに細かく調整できます。

494y92bs.alert_caution(ja-jp,VS.90).gif重要 :

クライアントの偽装が有効で、XmlDataSource コントロールのソース ファイルがクライアント ID に基づいて取得される場合は、EnableCaching プロパティを false に設定することをお勧めします。キャッシュを有効にすると、特定のユーザーのキャッシュされた XML データをすべてのユーザーが参照できるようになるため、機密情報が不適切なソースに公開される可能性があります。クライアントの偽装は、identity 構成要素の impersonate 属性が true に設定され、アプリケーションの匿名 ID が Web サーバーで無効になっている場合に有効になります。

ページのトップへ

コード例

XmlDataSource コントロールによるデータのフィルタ処理

XmlDataSource コントロールへの表形式のコントロールのバインド

チュートリアル : XML データを表示する Web ページの作成

ページのトップへ

クラス リファレンス

XmlDataSource コントロールに関連する主要なクラスの一覧を次の表に示します。

メンバ

説明

XmlDataSource

コントロールのメイン クラスです。

ページのトップへ

参照

参照

XML Web サーバー コントロールの概要