The problem is that you subscribed to the NodeChanged event instead of the NodeChanging event. The NodeChanged event is fired _after_ the node has been changed, while the NodeChanging event is fired _before_.
Csaba > -----Original Message----- > From: Steven Livingstone [mailto:[EMAIL PROTECTED]] > Sent: Monday, August 12, 2002 5:01 PM > To: [EMAIL PROTECTED] > Subject: [ADVANCED-DOTNET] 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.
