Share via


XmlDataSource.Save 메서드

정의

XmlDataSource 속성이 설정된 경우 DataFile 컨트롤이 메모리에 현재 보유한 XML 데이터를 디스크에 저장합니다.

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

예외

XML 데이터가 Data 속성 대신 DataFile 속성을 사용하여 로드된 경우

또는 DataFile 속성에 대한 URL이 지정되어 있지만 XmlDataSource 컨트롤에 웹 리소스에 대한 올바른 권한이 없는 경우

DataFile 속성에 대한 URL이 지정되어 있지만 HTTP 기반 URL이 아닌 경우

또는 XmlDataSource 컨트롤을 사용하기 전에 디자이너에서 디자인 타임 상대 경로를 올바르게 매핑하지 않은 경우

DataFile 속성의 지정된 경로에 대한 액세스가 거부된 경우

예제

이 섹션에는 두 코드 예제가 있습니다. 첫 번째 코드 예제에 사용 하는 방법을 보여 줍니다.는 XmlDataSource 컨트롤을 TreeView 컨트롤을 표시 하 고 XML 파일에 포함 된 XML 데이터를 편집 합니다. 두 번째 코드 예제에 사용 하는 방법을 보여 줍니다.는 XmlDataSource 템플릿 기반 컨트롤과 Repeater 컨트롤을 표시 하 고 XML 파일에 포함 된 XML 데이터를 편집 합니다.

다음 코드 예제에 사용 하는 방법을 보여 줍니다.는 XmlDataSource 컨트롤을 TreeView 컨트롤을 표시 하 고 XML 파일에 포함 된 XML 데이터를 편집 합니다. 사용 하 여 메모리에서 데이터 조작 되는 GetXmlDocument 메서드를 선택할 때마다를 TreeView 노드를 다음 XML 파일에 저장 됩니다. 마지막으로, DataBind 라고 하는 TreeView 컨트롤을 표시 하는 데이터를 새로 고칩니다.

<%@ 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 데이터를 편집 합니다. 앞의 예제와 데이터를 사용 하 여 메모리에서 조작 되는 대로 합니다 XmlDataDocument 에서 검색 한 개체는 GetXmlDocument 메서드. 마지막으로, DataBind 라고 하는 TreeView 컨트롤을 표시 하는 데이터를 새로 고칩니다.

<%@ 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 파일에 다음 데이터가 있습니다.

<?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 데이터를 편집 하는 컨트롤입니다. 이러한 시나리오에서 XML 데이터에서 XML 파일에서 로드 되는 XmlDataSource 제어 합니다. 수정 합니다 XmlDataDocument 사용 하 여 메모리에는 GetXmlDocument 메서드를 호출 하 여 XML 데이터 파일에 대 한 다음 저장을 Save 메서드. 이 편집 가능한 XML 시나리오는 다음 조건이 충족 되 면 수 있습니다:

  • XML 데이터를 나타내는 XML 파일에서 로드 되는 DataFile 속성에 지정 된 인라인 XML 데이터에서 하지는 Data 속성.

  • 에 지정 된 XSLT 변환이 합니다 Transform 또는 TransformFile 속성입니다.

Save 메서드 처리 하지 않는 저장 작업 동시 다른 요청에서. 둘 이상의 사용자가를 통해 XML 파일을 편집 하는 경우는 XmlDataSource 제어는 모든 사용자는 동일한 데이터를 사용 하 여 작동 하는 보장 되지 않습니다. 수 이기도 한 Save 작업이 이러한 같은 동시성 문제로 인해 실패 하 게 합니다.

적용 대상

추가 정보