Auf Englisch lesen

Freigeben über


Ereignisbehandlung in einem XML-Dokument mit "XmlNodeChangedEventArgs"

XmlNodeChangedEventArgs kapselt die Argumente, die den beim XmlDocument-Objekt zur Verarbeitung von Ereignissen registrierten Ereignishandlern übergeben werden. Die folgende Tabelle enthält die Ereignisse und eine Beschreibung der Situation, in der sie ausgelöst werden.

event Wird ausgelöst
NodeInserting Wenn ein Knoten, der zum aktuellen Dokument gehört, gerade in einen anderen Knoten eingefügt wird.
NodeInserted Wenn ein Knoten, der zum aktuellen Dokument gehört, gerade in einen anderen Knoten eingefügt wurde.
NodeRemoving Wenn ein Knoten, der zum aktuellen Dokument gehört, gerade aus dem Dokument entfernt wird.
NodeRemoved Wenn ein Knoten, der zum aktuellen Dokument gehört, aus dem übergeordneten Knoten entfernt wurde.
NodeChanging Wenn der Wert eines Knotens gerade geändert wird.
NodeChanged Wenn der Wert eines Knotens geändert wurde.

Hinweis

Wenn die Speicherauslastung von XmlDataDocument vollständig für die DataSet-Speicherung optimiert ist, wird durch XmlDataDocument bei Änderungen des zugrunde liegenden DataSet möglicherweise keines der oben aufgeführten Ereignisse ausgelöst. Wenn diese Ereignisse benötigt werden, muss das ganze XmlDocument einmal durchlaufen werden, damit die Speicherauslastung nicht vollständig optimiert wird.

Im folgenden Codebeispiel wird veranschaulicht, wie ein Ereignishandler definiert und dann einem Ereignis hinzugefügt wird.

C#
// 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!!");  
}  

Manche DOM-Operationen sind Verbundoperationen, die mehrere Ereignisse auslösen können. AppendChild muss den gerade angefügten Knoten möglicherweise auch aus dem übergeordneten Element entfernen. In diesem Fall wird zuerst ein NodeRemoved-Ereignis und dann ein NodeInserted-Ereignis ausgelöst. Vorgänge (z.B. das Festlegen von InnerXml) können zu mehreren Ereignissen führen.

Im folgenden Codebeispiel wird das Erstellen des Ereignishandlers und die Behandlung des NodeInserted-Ereignisses veranschaulicht.

C#
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

Weitere Informationen finden Sie unter XmlNodeChangedEventArgs und XmlNodeChangedEventHandler.

Siehe auch