XmlDataSource.Save メソッド
アセンブリ: System.Web (system.web.dll 内)


例外の種類 | 条件 |
---|---|
InvalidOperationException | XML データが、DataFile プロパティではなく、Data プロパティを使って読み込まれています。 または DataFile プロパティに対して URL が指定されていますが、XmlDataSource コントロールに、その Web リソースに対する適切なアクセス許可がありません。 |
NotSupportedException | DataFile プロパティに対して、HTTP ベースではない URL が指定されています。 または XmlDataSource コントロールを使用する前に、デザイン時の相対パスがデザイナによって正しく割り当てられていませんでした。 |
HttpException |

XmlDataSource コントロールはバインディングしたデータを読み取り専用で利用する目的で使用されるのが一般的ですが、XmlDataSource コントロールを使用して、基になる XML データ ファイルの XML データを編集することもできます。この場合、XML データは、XmlDataSource コントロールによって XML ファイルから読み込まれます。GetXmlDocument メソッドを使用してメモリ内の XmlDataDocument を変更してから、Save メソッドを呼び出して XML データ ファイルに保存します。このような形で XML を編集するには、次の条件が満たされていることが必要です。
Save メソッドは、複数の保存要求を同時に処理することはできません。複数のユーザーが XmlDataSource コントロールを使用して XML ファイルを編集する場合、必ずしもすべてのユーザーが同じデータを操作しているとは限りません。複数のユーザーが同時に保存要求を発行した場合、Save 操作に失敗する場合があります。

このセクションには、2 つのコード例が含まれています。1 つ目のコード例は、XmlDataSource コントロールを TreeView コントロールと組み合わせて使用し、XML ファイル内の XML データを表示および編集する方法を示しています。2 つ目のコード例は、XmlDataSource コントロールをテンプレートの Repeater コントロールと組み合わせて使用し、XML ファイル内の XML データを表示および編集する方法を示しています。
次のコード例は、XmlDataSource コントロールを TreeView コントロールと組み合わせて使用し、XML ファイル内の XML データを表示および編集する方法を示しています。TreeView のノードが選択されるたびに、GetXmlDocument メソッドを使用してデータをメモリ内で操作した後、XML ファイルに保存しています。最後に、TreeView コントロールに対して DataBind を呼び出し、表示するデータを更新します。
<%@ Page LANGUAGE="VB" SMARTNAVIGATION="false" %> <%@ Import Namespace="System.Xml" %> <script runat="server" > Private Sub TreeView1_SelectedNodeChanged(sender As Object, e As EventArgs) Dim myXml As New XmlDocument myXml = CType(XmlSource.GetXmlDocument(), XmlDataDocument) Dim iterator As String = TreeView1.SelectedNode.DataPath Dim myNode As XmlNode = myXml.SelectSingleNode(iterator) myNode.InnerText = "ThisIsATest" XmlSource.Save() TreeView1.DataBind() TreeView1.ExpandAll() End Sub ' TreeView1_SelectedNodeChanged </script> <form runat="server" > <asp:xmldatasource runat="server" id="XmlSource" xpath="/bookstore/book" datafile="Booksort.xml" enableviewstate="False" enablecaching="False" /> <asp:treeview runat="server" id="TreeView1" initialexpanddepth="3" datasourceid="XmlSource" maxdatabinddepth="3" autogeneratedatabindings="False" onselectednodechanged="TreeView1_SelectedNodeChanged" > <databindings> <asp:treenodebinding datamember="book" valuefield="publicationdate" /> <asp:treenodebinding datamember="title" valuefield="#InnerText" /> <asp:treenodebinding datamember="author" valuefield="#InnerText" /> <asp:treenodebinding datamember="first-name" valuefield="#InnerText" /> <asp:treenodebinding datamember="last-name" valuefield="#InnerText" /> </databindings> </asp:treeview> </form>
<%@ Page LANGUAGE="CS" SMARTNAVIGATION="false" %> <%@ Import Namespace="System.Xml" %> <script runat="server" > void TreeView1_SelectedNodeChanged(Object sender, EventArgs e) { XmlDocument myXml = new XmlDocument(); myXml=(XmlDocument)XmlSource.GetXmlDocument(); String iterator = TreeView1.SelectedNode.DataPath; XmlNode myNode = myXml.SelectSingleNode(iterator); myNode.InnerText = "ThisIsATest"; XmlSource.Save(); TreeView1.DataBind(); TreeView1.ExpandAll(); } </script> <form runat="server"> <asp:xmldatasource runat="server" id="XmlSource" xpath="/bookstore/book" datafile="Booksort.xml" enableviewstate="False" enablecaching="False" /> <asp:treeview runat="server" id="TreeView1" initialexpanddepth="3" datasourceid="XmlSource" maxdatabinddepth="3" autogeneratedatabindings="False" onselectednodechanged="TreeView1_SelectedNodeChanged" > <databindings> <asp:treenodebinding datamember="book" valuefield="publicationdate" /> <asp:treenodebinding datamember="title" valuefield="#InnerText" /> <asp:treenodebinding datamember="author" valuefield="#InnerText" /> <asp:treenodebinding datamember="first-name" valuefield="#InnerText" /> <asp:treenodebinding datamember="last-name" valuefield="#InnerText" /> </databindings> </asp:treeview> </form>
<%@ Page LANGUAGE="VJ#" SMARTNAVIGATION="false" %> <%@ Import Namespace="System.Xml" %> <script runat="server" > void TreeView1_SelectedNodeChanged(Object sender, System.EventArgs e) { XmlDocument myXml = new XmlDocument(); myXml=(XmlDocument)XmlSource.GetXmlDocument(); String iterator = TreeView1.get_SelectedNode().get_DataPath(); XmlNode myNode = myXml.SelectSingleNode(iterator); myNode.set_InnerText("ThisIsATest"); XmlSource.Save(); TreeView1.DataBind(); TreeView1.ExpandAll(); }//TreeView1_SelectedNodeChanged </script> <form runat="server"> <asp:xmldatasource runat="server" id="XmlSource" xpath="/bookstore/book" datafile="Booksort.xml" enableviewstate="False" enablecaching="False" /> <asp:treeview runat="server" id="TreeView1" initialexpanddepth="3" datasourceid="XmlSource" maxdatabinddepth="3" autogeneratedatabindings="False" onselectednodechanged="TreeView1_SelectedNodeChanged" > <databindings> <asp:treenodebinding datamember="book" valuefield="publicationdate" /> <asp:treenodebinding datamember="title" valuefield="#InnerText" /> <asp:treenodebinding datamember="author" valuefield="#InnerText" /> <asp:treenodebinding datamember="first-name" valuefield="#InnerText" /> <asp:treenodebinding datamember="last-name" valuefield="#InnerText" /> </databindings> </asp:treeview> </form>
次のコード例は、XmlDataSource コントロールを、テンプレートの Repeater コントロールと組み合わせて使用し、XML ファイル内の XML データを表示および編集する方法を示しています。前の例と同様、データは GetXmlDocument メソッドによって取得された XmlDataDocument オブジェクトを使用し、メモリ内で操作されます。最後に、TreeView コントロールに対して DataBind を呼び出し、表示するデータを更新します。
<%@ Page LANGUAGE="VB" SMARTNAVIGATION="false" %> <%@ Import Namespace="System.Xml" %> <script runat="server" > Private Sub Button1_Click(sender As Object, e As EventArgs) Dim myXml As New XmlDocument myXml = CType(XmlSource.GetXmlDocument(), XmlDocument) Dim path As String = "bookstore/book/@publicationdate" Dim nodeList As XmlNodeList = myXml.SelectNodes(path) Dim aDate As XmlNode For Each aDate In nodeList Dim helper As Integer = Int32.Parse(aDate.Value) + 2 aDate.Value = helper.ToString() Next aDate XmlSource.Save() Repeater1.DataBind() End Sub 'Button1_Click </script> <form runat="server" > <asp:XmlDataSource runat="server" ID="XmlSource" XPath="bookstore/book[@genre='novel']" DataFile="Booksort2.xml" EnableViewState="True" EnableCaching="False" /> <asp:Repeater runat="server" ID="Repeater1" DataSourceID="XmlSource" > <ItemTemplate > <h1><%# XPath ("title/text()") %> </h1> <b>Author:</b><%# XPath ("author/first-name/text()") %> <%# XPath ("author/last-name/text()") %> <b>PublicationDate:</b><%# XPath ("@publicationdate") %> <b>Price:</b><%# XPath ("price/text()") %> </ItemTemplate> </asp:Repeater> <p><asp:Button runat="server" ID="Button1" onclick="Button1_Click" Text="Add 2 years to the Publication Date!" /></p> </form>
<%@ Page LANGUAGE="CS" SMARTNAVIGATION="false" %> <%@ Import NameSpace="System.Xml" %> <script runat="server" > void Button1_Click(Object sender, EventArgs e) { XmlDocument myXml = new XmlDocument(); myXml=(XmlDocument)XmlSource.GetXmlDocument(); String path = "bookstore/book/@publicationdate"; XmlNodeList nodeList; nodeList = myXml.SelectNodes(path); foreach (XmlNode date in nodeList) { int helper = int.Parse(date.Value) + 2; date.Value = helper.ToString(); } XmlSource.Save(); Repeater1.DataBind(); } </script> <form runat="server" > <asp:XmlDataSource runat="server" ID="XmlSource" XPath="bookstore/book[@genre='novel']" DataFile="Booksort2.xml" EnableViewState="True" EnableCaching="False" /> <asp:Repeater runat="server" ID="Repeater1" DataSourceID="XmlSource" > <ItemTemplate > <h1><%# XPath ("title/text()") %> </h1> <b>Author:</b><%# XPath ("author/first-name/text()") %> <%# XPath ("author/last-name/text()") %> <b>PublicationDate:</b><%# XPath ("@publicationdate") %> <b>Price:</b><%# XPath ("price/text()") %> </ItemTemplate> </asp:Repeater> <p><asp:Button runat="server" ID="Button1" onclick="Button1_Click" Text="Add 2 years to the Publication Date!" /></p> </form>
<%@ Page LANGUAGE="VJ#" SMARTNAVIGATION="false" %> <%@ Import NameSpace="System.Xml" %> <script runat="server" > void Button1_Click(Object sender, System.EventArgs e) { XmlDocument myXml = new XmlDocument(); myXml=(XmlDocument)XmlSource.GetXmlDocument(); String path = "bookstore/book/@publicationdate"; XmlNodeList nodeList; nodeList = myXml.SelectNodes(path); for(int iCtr =0; iCtr < nodeList.get_Count(); iCtr++) { XmlNode date = nodeList.get_ItemOf(iCtr); int helper = Int32.Parse(date.get_Value()) + 2; date.set_Value(String.valueOf(helper)); } XmlSource.Save(); Repeater1.DataBind(); }//Button1_Click </script> <form runat="server" > <asp:XmlDataSource runat="server" ID="XmlSource" XPath="bookstore/book[@genre='novel']" DataFile="Booksort2.xml" EnableViewState="True" EnableCaching="False" /> <asp:Repeater runat="server" ID="Repeater1" DataSourceID="XmlSource" > <ItemTemplate > <h1><%# XPath ("title/text()") %> </h1> <b>Author:</b><%# XPath ("author/first-name/text()") %> <%# XPath ("author/last-name/text()") %> <b>PublicationDate:</b><%# XPath ("@publicationdate") %> <b>Price:</b><%# XPath ("price/text()") %> </ItemTemplate> </asp:Repeater> <p><asp:Button runat="server" ID="Button1" onclick="Button1_Click" Text="Add 2 years to the Publication Date!" /></p> </form>
コード例の XML ファイルには、次のデータが含まれています。
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?> <bookstore xmlns:bk="urn:samples"> <book genre="novel" publicationdate="1999" bk:ISBN="0000000000"> <title>Secrets of Silicon Valley</title> <author> <first-name>Sheryl</first-name> <last-name>Hunter</last-name> </author> <price>24.95</price>" </book> <book genre="novel" publicationdate="1985" bk:ISBN="1111111111"> <title>Straight Talk About Computers</title> <author> <first-name>Dean</first-name> <last-name>Straight</last-name> </author> <price>29.95</price> </book> </bookstore>

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- XmlDataSource.Save メソッドのページへのリンク