It seems to be a heavy subject and I'm still fairly new to the whole thing but, for what it's worth, I'm using xml files.
I've got one server and I'm trying to create multiple environments within it, so I use a parent package, with an xml configuration file. This lets me define variables that are specific to the environment (PROD, TEST, DEV, etc.). I can use variables to define the locations and names of child packages, meaning that I can switch between each environment just by changing the xml config file the parent package is fed.
With environment variables, I only have one environment, so I couldn't manage this flexibility.
Hope this helps