15.6. Detecting Changes to an XML Document

Problem

You need to inform one or more classes or components that a node in an XML document has been inserted or removed or had its value changed.

Solution

In order to track changes to an active XML document, subscribe to the events published by the XDocument class. XDocument publishes events for when a node is changing and when it has changed for both the pre- and post-conditions of a node change.

Recipe 15.6 shows a number of event handlers defined in the same scope as the DetectXMLChanges method, but they could just as easily be callbacks to functions on other classes that are interested in the manipulation of the live XML document.

DetectXMLChanges loads an XML fragment you define in the method; wires up the event handlers for the node events; adds, changes, and removes some nodes to trigger the events; and then writes out the resulting XML.

Example 15-5. Detecting changes to an XML document

public static void DetectXmlChanges( ) { XDocument xDoc = new XDocument( new XDeclaration("1.0", "UTF-8", "yes"), new XComment("My sample XML"), new XProcessingInstruction("myProcessingInstruction", "value"), new XElement("Root", new XElement("Node1", new XAttribute("nodeId", "1"), "FirstNode"), new XElement("Node2", new XAttribute("nodeId", "2"), "SecondNode"), new XElement("Node3", new XAttribute("nodeId", "1"), "ThirdNode"), new XElement("Node4", new XCData(@"<>\&'")) ) ); //Create the event handlers. xDoc.Changing += xDoc_Changing; xDoc.Changed += ...

Get C# 3.0 Cookbook, 3rd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.