Sdílet prostřednictvím


XmlDataSource.Save Metoda

Definice

Uloží data XML aktuálně uložená v paměti ovládacím XmlDataSource prvku na disk, pokud DataFile je vlastnost nastavena.

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

Výjimky

Data XML byla načtena pomocí Data vlastnosti místo DataFile vlastnosti.

nebo

Pro vlastnost je zadána DataFile adresa URL, XmlDataSource ale ovládací prvek nemá správná oprávnění pro webový prostředek.

Pro vlastnost je zadaná DataFile adresa URL, nejedná se však o adresu URL založenou na protokolu HTTP.

nebo

Návrhář před použitím ovládacího prvku nenamapoval správně relativní cestu v době návrhu XmlDataSource .

Přístup k cestě zadané pro DataFile vlastnost je odepřen.

Příklady

Tato část obsahuje dva příklady kódu. První příklad kódu ukazuje, jak použít XmlDataSource ovládací prvek s ovládacím TreeView prvek k zobrazení a úpravě dat XML obsažených v souboru XML. Druhý příklad kódu ukazuje, jak pomocí XmlDataSource ovládacího prvku se šablonou Repeater k zobrazení a úpravě dat XML obsažených v souboru XML.

Následující příklad kódu ukazuje použití XmlDataSource ovládacího prvku s ovládacím TreeView prvku k zobrazení a úpravě dat XML obsažených v souboru XML. Data se manipulují s pamětí pomocí GetXmlDocument metody pokaždé, když vyberete TreeView uzel, a pak se uloží do souboru XML. Nakonec se zavolá ovládací TreeView prvek, DataBind který aktualizuje data, která se zobrazí.

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

Následující příklad kódu ukazuje, jak použít XmlDataSource ovládací prvek se šablonou Repeater ovládacího prvku k zobrazení a úpravě dat XML obsažených v souboru XML. Stejně jako v předchozím příkladu se data manipulují s pamětí pomocí objektu XmlDataDocument načteného metodou GetXmlDocument . Nakonec se zavolá ovládací TreeView prvek, DataBind který aktualizuje data, která se zobrazí.

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

Soubor XML v příkladech kódu obsahuje následující 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>

Poznámky

I když se XmlDataSource ovládací prvek obvykle používá ve scénářích datových vazeb jen pro čtení, můžete ovládací prvek použít XmlDataSource k úpravě dat XML v podkladovém datovém souboru XML. V těchto scénářích se data XML načtou ze souboru XML ovládacím XmlDataSource prvku. Upravíte XmlDataDocument v paměti pomocí GetXmlDocument metody a pak uložíte do datového souboru XML voláním Save metody. Tento upravitelný scénář XML je možný, pokud jsou splněny následující podmínky:

  • Data XML se načtou ze souboru XML označeného DataFile vlastností, nikoli z vložených dat XML zadaných Data ve vlastnosti.

  • V objektech nebo TransformFile vlastnostech Transform není zadána žádná transformace XSLT.

Metoda Save nezpracuje souběžné operace ukládání podle různých požadavků. Pokud soubor XML upravuje více uživatelů prostřednictvím XmlDataSource ovládacího prvku, není zaručeno, že všichni uživatelé pracují se stejnými daty. Operace může také Save selhat kvůli stejným problémům souběžnosti.

Platí pro

Viz také