I'm kind of confused - you seem to be asking both about loading data from XML as well as how to implement a generalized casting system.
Anyway, as for the implementation details, if I remember correctly. warcraft 3 used to have standardised names for different things. Spell animations were given names such as Spell1, Spell2, etc. Attack animations had names such as Attack1, AttackCrit and AttackSpin. The game engine would pick an animation out of a "list" of animations that you allowed. So for example, an attack might have two animations enabled by it - Attack1 and Attack2. Whereas a specialized spell might only have one animation attached, such as SpellSummon. you only needed to supply the animation names. The animations were build into the models (the animations could be baked into the models using 3dSMax. I'm not sure about how it was done, as I've never ventured into the modelling side of things, but I'm pretty sure there was a plugin provided by blizzard for animation.)
As for particle effects and particle systems, the were known as "buffs". Buffs had no gameplay impact at all. They were used to attached particles and trails to "attachment points" on the model. these attachment points were also baked into the model. common attachment points included (hand,left), (hand,right), and chest. There were also other, more specialzed attachment points that only worked on a few models such as (mount). Anyway, these buffs could have a duration associated with them, and the particles expired after the duration.
When the particles were created, they played their "created" animation. and then they looped an intermediate animation. on being destroyed, they played their "destroyed" animation. Like I said, particles were controlled indirectly through buffs.
As for storage, blizzard has it's own format (.MPQ I think), with it's custom method for storing objects. I don't remember the details, but the wikipedia page has some decent information.
Hope this helps