For the question of how to deserialize an xml file in c#, this question on stack overflow explains it pretty well: How to Deserialize XML documentHow to Deserialize XML document
The gist of it is, you need to create a class for each type you are going to represent in the xml files, in the example you gave it would be event, item, item_modify and possibly battle, and define for each object properties corresponding to its content in the xml, for example every event had text.
From then on is a question of what you want to do with these events. Separate interpreting the xml files themselves from what you want the events to do. You should first define the scope of what events the game should have. If you are making a game, this would be rather simple because the event will simply have to serve the mechanics of the game (A simple retro RPG game would have things like random encounters events, gaining items or effects like poison and sleep). If you are making a game engine it might be more complicated as you need to design your events around an unspecific general goal.
The next question you should ask is what part of your game should handle these events. You can't simply send the events to whatever part of your game that is supposed to handle each event (for example, an inventory should handle all item events) because the question of what class should handle what event can only be answered after reading the event, so an intermediate must decide what part should get what event. The solution to this problem can vary wildly depending on your implementation so far but the simplest solution is this: whenever you read a new event, ALL classes that can handle events receive it, and each one handles it on it's own discretion.
You can implement such a system by having a single class (EventReader) with a method that receives a file name, and with a C# event that receives an instance of the class representing game events (Event).
public class EventReader{
public delegate void GameEventHandler(Event e);
public event GameEventHandler GameEventReceived;
public void readEvent(String path){
XmlSerializer serializer = new XmlSerializer(typeof(Event));
using(StreamReader reader = new StreamReader(path)){
reader.ReadToEnd();
event = (Event)serializer.Deserialize(reader);
if(GameEventReceived != null)
GameEventReceived(event);
}
}
}
Every class that wishes to handle game event can simply add the game event handling method to the game-event event on this class.