LINQ to XML-Ereignisse (C#)LINQ to XML Events (C#)

Mit LINQ to XML-Ereignissen können Sie sich benachrichtigen lassen, wenn eine XML-Struktur geändert wird.LINQ to XML events enable you to be notified when an XML tree is altered.

Ereignisse können allen Instanzen eines XObject hinzugefügt werden.You can add events to an instance of any XObject. Der Ereignishandler empfängt dann Ereignisse für Änderungen an diesem XObject und dessen Nachfolgern.The event handler will then receive events for modifications to that XObject and any of its descendants. So können Sie z. B. dem Stamm der Struktur einen Ereignishandler hinzufügen und alle Änderungen an der Struktur von diesem Ereignishandler behandeln lassen.For example, you can add an event handler to the root of the tree, and handle all modifications to the tree from that event handler.

Beispiele für LINQ to XML-Ereignisse finden Sie unter Changing und Changed.For examples of LINQ to XML events, see Changing and Changed.

Typen und EreignisseTypes and Events

Beim Arbeiten mit Ereignissen stehen Ihnen die folgenden Typen zur Verfügung:You use the following types when working with events:

TypType BeschreibungDescription
XObjectChange Gibt den Ereignistyp an, wenn ein Ereignis für ein XObject ausgelöst wird.Specifies the event type when an event is raised for an XObject.
XObjectChangeEventArgs Stellt Daten für das Changing-Ereignis und das Changed-Ereignis bereit.Provides data for the Changing and Changed events.

Die folgenden Ereignisse werden ausgelöst, wenn Sie eine XML-Struktur ändern:The following events are raised when you modify an XML tree:

EreignisEvent BeschreibungDescription
Changing Tritt ein, unmittelbar bevor sich dieses XObject oder eines seiner Nachfolger ändert.Occurs just before this XObject or any of its descendants is going to change.
Changed Tritt ein, wenn sich ein XObject oder eines seiner Nachfolger geändert hat.Occurs when an XObject has changed or any of its descendants have changed.

BeispielExample

BeschreibungDescription

Ereignisse erweisen sich als nützlich, wenn aggregierte Informationen in einer XML-Struktur bereitgestellt werden sollen.Events are useful when you want to maintain some aggregate information in an XML tree. So können Sie auf diese Weise z. B. einen Rechnungsgesamtbetrag bereitstellen, der sich aus der Summe der Einzelpositionen der Rechnung ergibt.For example, you may want maintain an invoice total that is the sum of the line items of the invoice. Dieses Beispiel verwendet Ereignisse, um den Gesamtbetrag aller untergeordneten Elemente des komplexen Elements Items bereitzustellen:This example uses events to maintain the total of all of the child elements under the complex element Items.

CodeCode

XElement root = new XElement("Root",  
    new XElement("Total", "0"),  
    new XElement("Items")  
);  
XElement total = root.Element("Total");  
XElement items = root.Element("Items");  
items.Changed += (object sender, XObjectChangeEventArgs cea) =>  
{  
    switch (cea.ObjectChange)  
    {  
        case XObjectChange.Add:  
            if (sender is XElement)  
                total.Value = ((int)total + (int)(XElement)sender).ToString();  
            if (sender is XText)  
                total.Value = ((int)total + (int)((XText)sender).Parent).ToString();  
            break;  
        case XObjectChange.Remove:  
            if (sender is XElement)  
                total.Value = ((int)total - (int)(XElement)sender).ToString();  
            if (sender is XText)  
                total.Value = ((int)total - Int32.Parse(((XText)sender).Value)).ToString();  
            break;  
    }  
    Console.WriteLine("Changed {0} {1}",  
      sender.GetType().ToString(), cea.ObjectChange.ToString());  
};  
items.SetElementValue("Item1", 25);  
items.SetElementValue("Item2", 50);  
items.SetElementValue("Item2", 75);  
items.SetElementValue("Item3", 133);  
items.SetElementValue("Item1", null);  
items.SetElementValue("Item4", 100);  
Console.WriteLine("Total:{0}", (int)total);  
Console.WriteLine(root);  

KommentareComments

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

Changed System.Xml.Linq.XElement Add  
Changed System.Xml.Linq.XElement Add  
Changed System.Xml.Linq.XText Remove  
Changed System.Xml.Linq.XText Add  
Changed System.Xml.Linq.XElement Add  
Changed System.Xml.Linq.XElement Remove  
Changed System.Xml.Linq.XElement Add  
Total:308  
<Root>  
  <Total>308</Total>  
  <Items>  
    <Item2>75</Item2>  
    <Item3>133</Item3>  
    <Item4>100</Item4>  
  </Items>  
</Root>  

Siehe auchSee Also

Advanced LINQ to XML Programming (C#) (Erweiterte LINQ to XML-Programmierung (C#))Advanced LINQ to XML Programming (C#)