XmlDataSource.Save Methode

Definition

Speichert die für das XmlDataSource-Steuerelement gegenwärtig im Speicher reservierten XML-Daten auf einem Datenträger, wenn die DataFile-Eigenschaft festgelegt ist.

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

Ausnahmen

XML-Daten wurden mit der Data-Eigenschaft statt der DataFile-Eigenschaft geladen.

- oder -

Für die DataFile-Eigenschaft wird eine URL angegeben. Das XmlDataSource-Steuerelement verfügt jedoch nicht über die entsprechenden Berechtigungen für die Webressource.

Für die DataFile-Eigenschaft ist eine URL angegeben, jedoch keine HTTP-basierte URL.

- oder -

Vor dem Verwenden des XmlDataSource-Steuerelements wurde ein relativer Pfad zur Entwurfszeit vom Designer nicht ordnungsgemäß zugeordnet.

Der Zugriff auf den für die DataFile-Eigenschaft angegebenen Pfad wird verweigert.

Beispiele

Dieser Abschnitt enthält zwei Codebeispiele. Im ersten Codebeispiel wird veranschaulicht, wie Ein XmlDataSource Steuerelement mit einem TreeView Steuerelement zum Anzeigen und Bearbeiten von XML-Daten in einer XML-Datei verwendet wird. Im zweiten Codebeispiel wird veranschaulicht, wie Sie ein XmlDataSource Steuerelement mit einem in Vorlagen basierenden Repeater Steuerelement verwenden, um XML-Daten in einer XML-Datei anzuzeigen und zu bearbeiten.

Im folgenden Codebeispiel wird veranschaulicht, wie Ein XmlDataSource Steuerelement mit einem TreeView Steuerelement zum Anzeigen und Bearbeiten von XML-Daten in einer XML-Datei verwendet wird. Die Daten werden bei jeder Auswahl eines TreeView Knotens mit der GetXmlDocument -Methode im Arbeitsspeicher bearbeitet und dann in der XML-Datei gespeichert. Schließlich wird für das TreeView -Steuerelement aufgerufen, DataBind um die angezeigten Daten zu aktualisieren.

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

Im folgenden Codebeispiel wird veranschaulicht, wie Sie ein XmlDataSource Steuerelement mit einem in Vorlagen basierenden Repeater Steuerelement verwenden, um XML-Daten anzuzeigen und zu bearbeiten, die in einer XML-Datei enthalten sind. Wie im vorherigen Beispiel werden die Daten im Arbeitsspeicher mithilfe des von der XmlDataDocumentGetXmlDocument -Methode abgerufenen Objekts bearbeitet. Schließlich wird für das TreeView -Steuerelement aufgerufen, DataBind um die angezeigten Daten zu aktualisieren.

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

Die XML-Datei in den Codebeispielen enthält die folgenden Daten:

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

Hinweise

Während das Steuerelement in der XmlDataSource Regel in schreibgeschützten Datenbindungsszenarien verwendet wird, können Sie das XmlDataSource Steuerelement verwenden, um XML-Daten in der zugrunde liegenden XML-Datendatei zu bearbeiten. In diesen Szenarien werden XML-Daten vom XmlDataSource Steuerelement aus einer XML-Datei geladen. Sie ändern den XmlDataDocument im Arbeitsspeicher mithilfe der GetXmlDocument -Methode, und speichern Sie dann in der XML-Datendatei, indem Sie die Save -Methode aufrufen. Dieses bearbeitbare XML-Szenario ist möglich, wenn die folgenden Bedingungen erfüllt sind:

  • Die XML-Daten werden aus einer XML-Datei geladen, die durch die DataFile -Eigenschaft angegeben wird, und nicht aus in der Data -Eigenschaft angegebenen INLINE-XML-Daten.

  • In den Transform Eigenschaften oder TransformFile ist keine XSLT-Transformation angegeben.

Die Save -Methode verarbeitet keine gleichzeitigen Speichervorgänge durch unterschiedliche Anforderungen. Wenn mehrere Benutzer eine XML-Datei über das XmlDataSource -Steuerelement bearbeiten, gibt es keine Garantie, dass alle Benutzer mit den gleichen Daten arbeiten. Es ist auch möglich, dass ein Save Vorgang aufgrund derselben Parallelitätsprobleme fehlschlägt.

Gilt für:

Weitere Informationen