The biggest problem with XML is that it's incredibly verbose, and is just a hassle to write by hand.
Also, using XML, all references must be global, which is another big argument against it. While in Lua you can write:
Code:
local f = CreateFrame("Frame")
f:RegisterEvent("ADDON_LOADED")
f:SetScript("OnEvent", MyAddOn.EventHandler)
... if you're using XML, you have to create 1-3 globals and 1-2 functions to achieve the same thing.
Firstly, you have to give the frame a global name, or you won't be able to access it from your Lua code.
Secondly, you have to create an anonymous function to register the event in an OnLoad script, or a global function to be assigned as the OnLoad script.
Finally, you either have to make MyAddOn.EventHandler a global function outside of the MyAddOn table (eg. instead of
function MyAddOn:EventHandler() ... end you'd need
function MyAddOn_EventHandler(MyAddOn) ... end) or double up on function calls by creating another anonymous wrapper function:
Code:
<Frame name="SomeGlobalSpam">
<Scripts>
<OnLoad>
self:RegisterEvent("ADDON_LOADED")
</OnLoad>
<OnEvent>
MyAddOn:EventHandler(event, ...)
</OnEvent>
</Scripts>
</Frame>