XmlNodeChangedEventArgs를 사용한 XML 문서의 이벤트 처리
XmlNodeChangedEventArgs는 이벤트 처리를 위해 XmlDocument 개체에 등록된 이벤트 처리기에 전달되는 인수를 캡슐화합니다. 다음 표에서는 이벤트와 해당 이벤트가 발생하는 시기에 대해 설명합니다.
이벤트 | 발생 시기 |
---|---|
NodeInserting | 현재 문서에 속한 노드가 다른 노드에 삽입되기 직전 |
NodeInserted | 현재 문서에 속한 노드가 다른 노드에 삽입된 후 |
NodeRemoving | 이 문서에 속한 노드가 문서에서 제거되기 직전 |
NodeRemoved | 이 문서에 속한 노드가 부모로부터 제거된 직후 |
NodeChanging | 노드 값이 변경되기 직전 |
NodeChanged | 노드 값이 변경된 직후 |
참고 항목
XmlDataDocument 메모리 사용이 DataSet 스토리지를 사용하도록 완전히 최적화된 경우 기본 DataSet이 변경될 때 XmlDataDocument에서 위에 나열된 어떠한 이벤트도 발생시키지 않을 수 있습니다. 이러한 이벤트가 필요한 경우 전체 XmlDocument를 한 번 트래버스하여 메모리 사용이 완전히 최적화되지 않은 상태로 만들어야 합니다.
다음 코드 예제에서는 이벤트 처리기를 정의하는 방법과 이벤트에 이벤트 처리기를 추가하는 방법을 보여 줍니다.
' Attach the event handler, NodeInsertedHandler, to the NodeInserted
' event.
Dim doc as XmlDocument = new XmlDocument()
Dim XmlNodeChgEHdlr as XmlNodeChangedEventHandler = new XmlNodeChangedEventHandler(addressof MyNodeChangedEvent)
AddHandler doc.NodeInserted, XmlNodeChgEHdlr
Dim n as XmlNode = doc.CreateElement( "element" )
Console.WriteLine( "Before Event Inserting" )
' This is the point where the new node is being inserted in the tree,
' and this is the point where the NodeInserted event is raised.
doc.AppendChild( n )
Console.WriteLine( "After Event Inserting" )
' Define the event handler that handles the NodeInserted event.
sub NodeInsertedHandler(src as Object, args as XmlNodeChangedEventArgs)
Console.WriteLine("Node " + args.Node.Name + " inserted!!")
end sub
// Attach the event handler, NodeInsertedHandler, to the NodeInserted
// event.
XmlDocument doc = new XmlDocument();
doc.NodeInserted += new XmlNodeChangedEventHandler(NodeInsertedHandler);
XmlNode n = doc.CreateElement( "element" );
Console.WriteLine( "Before Event Inserting" );
// This is the point where the new node is being inserted in the tree,
// and this is the point where the NodeInserted event is raised.
doc.AppendChild( n );
Console.WriteLine( "After Event Inserting" );
// Define the event handler that handles the NodeInserted event.
void NodeInsertedHandler(Object src, XmlNodeChangedEventArgs args)
{
Console.WriteLine("Node " + args.Node.Name + " inserted!!");
}
일부 XML DOM(문서 개체 모델) 작업은 여러 이벤트가 발생될 수 있는 복합 작업입니다. 예를 들어 AppendChild는 추가되는 노드를 이전 부모에서 제거해야 할 수도 있습니다. 이 경우 먼저 NodeRemoved 이벤트가 발생한 다음, NodeInserted 이벤트가 발생합니다. InnerXml을 설정하는 것과 같은 작업으로 여러 이벤트가 발생할 수 있습니다.
다음 코드 예제에서는 이벤트 처리기를 만드는 방법과 NodeInserted 이벤트를 처리하는 방법을 보여줍니다.
Imports System
Imports System.IO
Imports System.Xml
Imports Microsoft.VisualBasic
Public Class Sample
Private Const filename As String = "books.xml"
Shared Sub Main()
Dim mySample As Sample = New Sample()
mySample.Run(filename)
End Sub
Public Sub Run(ByVal args As String)
' Create and load the XML document.
Console.WriteLine("Loading file 0 ...", args)
Dim doc As XmlDocument = New XmlDocument()
doc.Load(args)
' Create the event handlers.
Dim XmlNodeChgEHdlr As XmlNodeChangedEventHandler = New XmlNodeChangedEventHandler(AddressOf MyNodeChangedEvent)
Dim XmlNodeInsertEHdlr As XmlNodeChangedEventHandler = New XmlNodeChangedEventHandler(AddressOf MyNodeInsertedEvent)
AddHandler doc.NodeChanged, XmlNodeChgEHdlr
AddHandler doc.NodeInserted, XmlNodeInsertEHdlr
' Change the book price.
doc.DocumentElement.LastChild.InnerText = "5.95"
' Add a new element.
Dim newElem As XmlElement = doc.CreateElement("style")
newElem.InnerText = "hardcover"
doc.DocumentElement.AppendChild(newElem)
Console.WriteLine(Chr(13) + Chr(10) + "Display the modified XML...")
Console.WriteLine(doc.OuterXml)
End Sub
' Handle the NodeChanged event.
Public Sub MyNodeChangedEvent(ByVal src As Object, ByVal args As XmlNodeChangedEventArgs)
Console.Write("Node Changed Event: <0> changed", args.Node.Name)
If Not (args.Node.Value Is Nothing) Then
Console.WriteLine(" with value 0", args.Node.Value)
Else
Console.WriteLine("")
End If
End Sub
' Handle the NodeInserted event.
Public Sub MyNodeInsertedEvent(ByVal src As Object, ByVal args As XmlNodeChangedEventArgs)
Console.Write("Node Inserted Event: <0> inserted", args.Node.Name)
If Not (args.Node.Value Is Nothing) Then
Console.WriteLine(" with value 0", args.Node.Value)
Else
Console.WriteLine("")
End If
End Sub
End Class ' End class
using System;
using System.IO;
using System.Xml;
public class Sample
{
private const String filename = "books.xml";
public static void Main()
{
Sample mySample = new Sample();
mySample.Run(filename);
}
public void Run(String args)
{
// Create and load the XML document.
Console.WriteLine ("Loading file {0} ...", args);
XmlDocument doc = new XmlDocument();
doc.Load (args);
// Create the event handlers.
doc.NodeChanged += new XmlNodeChangedEventHandler(this.MyNodeChangedEvent);
doc.NodeInserted += new XmlNodeChangedEventHandler(this.MyNodeInsertedEvent);
// Change the book price.
doc.DocumentElement.LastChild.InnerText = "5.95";
// Add a new element.
XmlElement newElem = doc.CreateElement("style");
newElem.InnerText = "hardcover";
doc.DocumentElement.AppendChild(newElem);
Console.WriteLine("\r\nDisplay the modified XML...");
Console.WriteLine(doc.OuterXml);
}
// Handle the NodeChanged event.
public void MyNodeChangedEvent(Object src, XmlNodeChangedEventArgs args)
{
Console.Write("Node Changed Event: <{0}> changed", args.Node.Name);
if (args.Node.Value != null)
{
Console.WriteLine(" with value {0}", args.Node.Value);
}
else
Console.WriteLine("");
}
// Handle the NodeInserted event.
public void MyNodeInsertedEvent(Object src, XmlNodeChangedEventArgs args)
{
Console.Write("Node Inserted Event: <{0}> inserted", args.Node.Name);
if (args.Node.Value != null)
{
Console.WriteLine(" with value {0}", args.Node.Value);
}
else
Console.WriteLine("");
}
} // End class
자세한 내용은 XmlNodeChangedEventArgs 및 XmlNodeChangedEventHandler를 참조하세요.
참고 항목
.NET