XmlNodeChangedEventArgs は、イベントを処理するために XmlDocument オブジェクトに登録されているイベント ハンドラーに渡される引数をカプセル化します。 各イベントとその発生するタイミングを次の表に示します。
出来事 | 解雇された |
---|---|
NodeInserting | 現在のドキュメントに属するノードが別のノードに挿入されようとしている場合。 |
NodeInserted | 現在のドキュメントに属するノードが別のノードに挿入されている場合。 |
NodeRemoving | このドキュメントに属するノードがドキュメントから削除されようとしている場合。 |
NodeRemoved | このドキュメントに属するノードがその親から削除されたとき。 |
NodeChanging | ノードの値が変更されようとしているとき。 |
NodeChanged | ノードの値が変更されたとき。 |
注
XmlDataDocument メモリ使用量が DataSet ストレージを使用するように完全に最適化されている場合、基になる DataSet に変更が加えられたときに、上記のイベントが発生しないことがあります。 これらのイベントが必要な場合は、 XmlDocument 全体を 1 回走査することで、メモリの使用が完全に最適化されないことになります。
次のコード例は、イベント ハンドラーを定義する方法と、イベント ハンドラーをイベントに追加する方法を示しています。
' 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