XmlDataSource.Save 方法

定義

如果 XmlDataSource 屬性已設定,儲存 DataFile 控制項目前存放在記憶體中的 XML 資料到磁碟中。Saves the XML data currently held in memory by the XmlDataSource control to disk if the DataFile property is set.

public:
 void Save();
public void Save ();
member this.Save : unit -> unit
Public Sub Save ()

例外狀況

XML 資料是使用 Data 屬性 (而不是 DataFile 屬性) 載入的。XML data was loaded using the Data property instead of the DataFile property.

-或--or- 指定了 DataFile 屬性的 URL,不過,XmlDataSource 控制項沒有 Web 資源的正確使用權限。A URL is specified for the DataFile property; however, the XmlDataSource control does not have the correct permissions for the Web resource.

DataFile 屬性指定 URL,然而,它不是 HTTP 的 URL。A URL is specified for the DataFile property; however, it is not an HTTP-based URL.

-或--or- 在使用 XmlDataSource 控制項之前,設計工具未正確對應設計階段相對路徑。A design-time relative path was not mapped correctly by the designer before using the XmlDataSource control.

DataFile 屬性指定之路徑的存取遭拒絕。Access is denied to the path specified for the DataFile property.

範例

本節包含兩個程式碼範例。This section contains two code examples. 第一個程式碼範例會示範如何使用控制項 XmlDataSource TreeView 來顯示和編輯 xml 檔案中包含的 xml 資料。The first code example demonstrates how to use an XmlDataSource control with a TreeView control to display and edit XML data contained in an XML file. 第二個程式碼範例示範如何使用 XmlDataSource 具有樣板化控制項的控制項, Repeater 來顯示和編輯 xml 檔案中包含的 xml 資料。The second code example demonstrates how to use an XmlDataSource control with a templated Repeater control to display and edit XML data contained in an XML file.

下列程式碼範例將示範如何使用控制項 XmlDataSource TreeView 來顯示和編輯 xml 檔案中包含的 xml 資料。The following code example demonstrates how to use an XmlDataSource control with a TreeView control to display and edit XML data contained in an XML file. 每次您選取節點時,就會使用方法在記憶體中運算元據 GetXmlDocument TreeView ,然後再儲存至 XML 檔案。The data is manipulated in memory using the GetXmlDocument method every time you select a TreeView node, and is then saved to the XML file. 最後, DataBind 在控制項上呼叫,以重新整理 TreeView 其顯示的資料。Finally, DataBind is called on the TreeView control to refresh the data that it displays.

<%@ Page LANGUAGE="C#" 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>

<!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 id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" runat="server">

      <asp:xmldatasource
        runat="server"
        id="XmlSource"
        xpath="/bookstore/book"
        datafile="Booksort.xml"
        enableviewstate="False"
        enablecaching="False" />

      <asp:treeview
        runat="server"
        id="TreeView1"
        ExpandDepth="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>
  </body>
</html>
<%@ 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>

<!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 id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" runat="server">

      <asp:xmldatasource
        runat="server"
        id="XmlSource"
        xpath="/bookstore/book"
        datafile="Booksort.xml"
        enableviewstate="False"
        enablecaching="False" />

      <asp:treeview
        runat="server"
        id="TreeView1"
        ExpandDepth="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>
  </body>
</html>

下列程式碼範例示範如何使用具有樣板 XmlDataSource 化控制項的控制項, Repeater 來顯示和編輯 xml 檔案中包含的 xml 資料。The following code example demonstrates how to use an XmlDataSource control with a templated Repeater control to display and edit XML data contained in an XML file. 如同上述範例,資料會使用方法所抓取的物件在記憶體中操作 XmlDataDocument GetXmlDocumentAs with the previous example, the data is manipulated in memory using the XmlDataDocument object retrieved by the GetXmlDocument method. 最後, DataBind 在控制項上呼叫,以重新整理 TreeView 其顯示的資料。Finally, DataBind is called on the TreeView control to refresh the data that it displays.

<%@ Page LANGUAGE="C#" 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>

<!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 id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" 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>
</body>
</html>
<%@ 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>

<!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 id="Head1" runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="Form1" 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>
</body>
</html>

程式碼範例中的 XML 檔案包含下列資料:The XML file in the code examples has the following data:

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

備註

雖然 XmlDataSource 控制項通常用於唯讀資料系結案例中,但您可以使用 XmlDataSource 控制項來編輯基礎 xml 資料檔案中的 xml 資料。While the XmlDataSource control is typically used in read-only data-binding scenarios, you can use the XmlDataSource control to edit XML data in the underlying XML data file. 在這些案例中,控制項會從 XML 檔案載入 XML 資料 XmlDataSourceIn these scenarios, XML data is loaded from an XML file by the XmlDataSource control. 您可以 XmlDataDocument 使用方法來修改記憶體中的 GetXmlDocument ,然後藉由呼叫方法來儲存至 XML 資料檔案 SaveYou modify the XmlDataDocument in memory using the GetXmlDocument method, and then save to the XML data file by calling the Save method. 當符合下列條件時,可以編輯 XML 案例:This editable XML scenario is possible when the following conditions are met:

  • XML 資料是從屬性所指定的 XML 檔案載入 DataFile ,而不是從屬性中指定的內嵌 xml 資料載入 DataThe XML data is loaded from an XML file indicated by the DataFile property, not from inline XML data specified in the Data property.

  • 或屬性中未指定任何 XSLT Transform 轉換 TransformFileNo XSLT transformation is specified in the Transform or TransformFile properties.

Save方法不會依不同的要求處理並行儲存作業。The Save method does not handle concurrent save operations by different requests. 如果有一位以上的使用者透過控制項編輯 XML 檔案 XmlDataSource ,就不保證所有使用者都是使用相同的資料來運作。If more than one user is editing an XML file through the XmlDataSource control, there is no guarantee that all users are operating with the same data. 作業也可能 Save 因為這些相同的並行問題而失敗。It is also possible for a Save operation to fail due to these same concurrency issues.

適用於

另請參閱