The XML is not read by the engine at all, only by the DLL. The engine reads it only as entity properties from APIs exposed by the DLL. As ls612 says, we could entirely replace XML storage of assets with SQL at runtime. However, we'd still need export and import to/from SQL to some serialized format for installation and upgrade, so practically we'd probably be exporting to/from some flat format (and XML is as good as any) which would relegate the SQL to a runtime store of the asset definition. IMO it's too much effort to justify just for that. If it also stored game state (so units etc.) as databases, and allowed runtime access to the gamestate via SQL (so it doesn't have to all be memory resident) then it might be justified (and I think that's what drove it for Civ V). However, if game states became database instances we'd then have compatibility issues since we'd have to be able to load them across schema changes, which means we'd AGAIN need to serialize to/from some other format (like current save compatibility format), which would be a bit of a nightmare (Civ V doesn't allow games to be saved in one schema and loaded in another I presume?? [i.e. - doesn't have the equivalent of our compatibility save capability])
The way civ 5 works is that on first run it reads the XML files from the core directory (ie, vanilla) and does two things. The first thing it does is convert all XML entries into an equivalent SQL statement (so a new entry in the Units XML would be converted into INSERT INTO Units ...) and then it creates a database file on disk (essentially acting as a cache for future loads). It then caches the database into memory (essentially what we do with XML now, using infos classes). So in Civ 5 adding a 'new tag' is actually adding and populating a new column to an SQL table and then adding supporting code for that in the DLL.
In civ 5 then mods modify the vanilla database, either through raw SQL statements like my example above or through XML files which mimic SQL statements (probably this was added so civ 4 modders could get into it more easily). That wouldn't be necessary for C2C as we just junk the base files entirely and create our own data cache on load from scratch. The aforementioned functionality to use SQL statements to modify 'tables' of data (and a table would be in C2C's case a first level XML tag, so UnitInfos, UnitClassInfos, etc) is I think a more elegant solution to what Nimek is trying to do with his parser, and uses easier syntax than XSLT, which would also work and do basically the same thing. It might also be able to reuse some of AIAndy's caching code, although I'm not sure about it.
But I can say that from working on CiV that full SQL support is the best thing (aside from the underlying engine) that Civ 5 has for modding that civ 4 doesn't. Seriously, it is like night and day for asset creation.