Steven, The NodeChanged event is raised when the mutation of the node is completed: by then, you cannot cancel the mutation by throwing an exception in the event handler. To prevent the mutation, you should handle the NodeChanging event instead: throwing an exception here, prevents the node from actually be mutated.
HTH, Stefan ----- Original Message ----- From: Steven Livingstone To: 'Moderated discussion of advanced .NET topics.' Sent: Monday, August 12, 2002 5:00 PM Subject: XmlNodeChangedEventHandler In the code below I raise an exception when a non-integer value is set as the new orderID on an attribute. It correctly determines this and raises and exception. But the Dom doc is supposed to go back to it's prior state, but it doesn't and the attrib value still gets updated (and the error also gets displayed!). So what am i missing? ... 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); try { // Change the book price. doc.DocumentElement.Attributes.GetNamedItem("orderID").Value = "1244C"; } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("\r\nDisplay the modified XML..."); Console.WriteLine(doc.OuterXml); Console.ReadLine(); } // Handle the NodeChanged event. public void MyNodeChangedEvent(Object src, XmlNodeChangedEventArgs args) { Console.WriteLine("OrderID being updated with value " + args.Node.Value); try { int newid = Convert.ToInt32(args.Node.Value); Console.WriteLine(" with value {0}", newid.ToString()); } catch { throw new Exception(args.Node.Value + " must be an integer value"); } } ... Output................. Loading file ..\..\nodeChange.xml ... OrderID being updated with value 1244C 1244C must be an integer value Display the modified XML... <?xml version="1.0" encoding="utf-8"?><PurchaseOrder orderID="1244C" /> You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.