I hadn't actually done any real work with XML until I was doing a mod (of a mod) for Civilization 4. However, I had some knowledge of Lisp and S-expressions, and right from the start I found myself maddened by the wanton inefficiency of XML's reinvented wheel. Diving right in, here's a piece of it:
<BonusInfo>
<Type>BONUS_IRON</Type>
<Description>TXT_KEY_BONUS_IRON</Description>
<Civilopedia>TXT_KEY_BONUS_IRON_PEDIA</Civilopedia>
<BonusClassType>BONUSCLASS_RUSH</BonusClassType>
<ArtDefineTag>ART_DEF_BONUS_IRON</ArtDefineTag>
<TechReveal>TECH_IRON_WORKING</TechReveal>
<TechCityTrade>TECH_MINING</TechCityTrade>
<TechObsolete>NONE</TechObsolete>
<YieldChanges>
<iYieldChange>0</iYieldChange>
<iYieldChange>1</iYieldChange>
<iYieldChange>0</iYieldChange>
</YieldChanges>
<iAITradeModifier>10</iAITradeModifier>
<iAIObjective>0</iAIObjective>
<iHealth>0</iHealth>
<iHappiness>0</iHappiness>
<iPlacementOrder>0</iPlacementOrder>
<iConstAppearance>162</iConstAppearance>
<iMinAreaSize>3</iMinAreaSize>
<iMinLatitude>0</iMinLatitude>
<iMaxLatitude>80</iMaxLatitude>
<Rands>
<iRandApp1>10</iRandApp1>
<iRandApp2>10</iRandApp2>
<iRandApp3>0</iRandApp3>
<iRandApp4>0</iRandApp4>
</Rands>
<iPlayer>100</iPlayer>
<iTilesPer>0</iTilesPer>
<iMinLandPercent>0</iMinLandPercent>
<iUnique>7</iUnique>
<iGroupRange>0</iGroupRange>
<iGroupRand>0</iGroupRand>
<bArea>0</bArea>
<bHills>1</bHills>
<bFlatlands>1</bFlatlands>
<bNoRiverSide>0</bNoRiverSide>
<bNormalize>0</bNormalize>
<TerrainBooleans>
<TerrainBoolean>
<TerrainType>TERRAIN_DESERT</TerrainType>
<bTerrain>1</bTerrain>
</TerrainBoolean>
<TerrainBoolean>
<TerrainType>TERRAIN_GRASS</TerrainType>
<bTerrain>1</bTerrain>
</TerrainBoolean>
<TerrainBoolean>
<TerrainType>TERRAIN_MARSH</TerrainType>
<bTerrain>1</bTerrain>
</TerrainBoolean>
<TerrainBoolean>
<TerrainType>TERRAIN_PLAINS</TerrainType>
<bTerrain>1</bTerrain>
</TerrainBoolean>
<TerrainBoolean>
<TerrainType>TERRAIN_TUNDRA</TerrainType>
<bTerrain>1</bTerrain>
</TerrainBoolean>
<TerrainBoolean>
<TerrainType>TERRAIN_SNOW</TerrainType>
<bTerrain>1</bTerrain>
</TerrainBoolean>
</TerrainBooleans>
<FeatureBooleans>
<FeatureBoolean>
<FeatureType>FEATURE_FLOOD_PLAINS</FeatureType>
<bFeature>1</bFeature>
</FeatureBoolean>
<FeatureBoolean>
<FeatureType>FEATURE_FOREST</FeatureType>
<bFeature>1</bFeature>
</FeatureBoolean>
<FeatureBoolean>
<FeatureType>FEATURE_JUNGLE</FeatureType>
<bFeature>1</bFeature>
</FeatureBoolean>
<FeatureBoolean>
<FeatureType>FEATURE_SWAMP</FeatureType>
<bFeature>1</bFeature>
</FeatureBoolean>
</FeatureBooleans>
<FeatureTerrainBooleans>
<FeatureTerrainBoolean>
<TerrainType>TERRAIN_GRASS</TerrainType>
<bFeatureTerrain>1</bFeatureTerrain>
</FeatureTerrainBoolean>
<FeatureTerrainBoolean>
<TerrainType>TERRAIN_PLAINS</TerrainType>
<bFeatureTerrain>1</bFeatureTerrain>
</FeatureTerrainBoolean>
<FeatureTerrainBoolean>
<TerrainType>TERRAIN_MARSH</TerrainType>
<bFeatureTerrain>1</bFeatureTerrain>
</FeatureTerrainBoolean>
<FeatureTerrainBoolean>
<TerrainType>TERRAIN_TUNDRA</TerrainType>
<bFeatureTerrain>1</bFeatureTerrain>
</FeatureTerrainBoolean>
</FeatureTerrainBooleans>
</BonusInfo>
Now, for some reason they didn't use any attributes; this makes it all the more painful to look at, but is convenient for this example because you'd have to convert them to elements anyway before doing what I'm about to do. Here is the exact same data structure (including bits that only need to exist because it's in XML, like the individual iYieldChange elements) represented as an S-expression, with the XML indentation scheme maintained just to keep it as familiar as possible (e.g., closing parentheses would normally not have their own lines):
(BonusInfo
(Type BONUS_IRON)
(Description TXT_KEY_BONUS_IRON)
(Civilopedia TXT_KEY_BONUS_IRON_PEDIA)
(BonusClassType BONUSCLASS_RUSH)
(ArtDefineTag ART_DEF_BONUS_IRON)
(TechReveal TECH_IRON_WORKING)
(TechCityTrade TECH_MINING)
(TechObsolete NONE)
(YieldChanges
(iYieldChange 0)
(iYieldChange 1)
(iYieldChange 0)
)
(iAITradeModifier 10)
(iAIObjective 0)
(iHealth 0)
(iHappiness 0)
(iPlacementOrder 0)
(iConstAppearance 162)
(iMinAreaSize 3)
(iMinLatitude 0)
(iMaxLatitude 80)
(Rands
(iRandApp1 10)
(iRandApp2 10)
(iRandApp3 0)
(iRandApp4 0)
)
(iPlayer 100)
(iTilesPer 0)
(iMinLandPercent 0)
(iUnique 7)
(iGroupRange 0)
(iGroupRand 0)
(bArea 0)
(bFlatlands 1)
(bHills 1)
(bNoRiverSide 0)
(bNormalize 0)
(TerrainBooleans
(TerrainBoolean
(TerrainType TERRAIN_DESERT)
(bTerrain 1)
)
(TerrainBoolean
(TerrainType TERRAIN_GRASS)
(bTerrain 1)
)
(TerrainBoolean
(TerrainType TERRAIN_MARSH)
(bTerrain 1)
)
(TerrainBoolean
(TerrainType TERRAIN_PLAINS)
(bTerrain 1)
)
(TerrainBoolean
(TerrainType TERRAIN_TUNDRA)
(bTerrain 1)
)
(TerrainBoolean
(TerrainType TERRAIN_SNOW)
(bTerrain 1)
)
)
(FeatureBooleans
(FeatureBoolean
(FeatureType FEATURE_FLOOD_PLAINS)
(bFeature 1)
)
(FeatureBoolean
(FeatureType FEATURE_FOREST)
(bFeature 1)
)
(FeatureBoolean
(FeatureType FEATURE_JUNGLE)
(bFeature 1)
)
(FeatureBoolean
(FeatureType FEATURE_SWAMP)
(bFeature 1)
)
)
(FeatureTerrainBooleans
(FeatureTerrainBoolean
(TerrainType TERRAIN_GRASS)
(bFeatureTerrain 1)
)
(FeatureTerrainBoolean
(TerrainType TERRAIN_PLAINS)
(bFeatureTerrain 1)
)
(FeatureTerrainBoolean
(TerrainType TERRAIN_MARSH)
(bFeatureTerrain 1)
)
(FeatureTerrainBoolean
(TerrainType TERRAIN_TUNDRA)
(bFeatureTerrain 1)
)
)
)
What's the difference? Just for starters, a 40% smaller file. And though this little grumble-fit has been in the back of my mind since I first heard Frogboy say the word "XML," his comment about the huge sizes of some of the tiles his artists were creating is what finally made me post. Beyond this, you could replace the YieldChanges set with (YieldChanges 0 1 0), and perform various similar optimizations (simplifying the terrain type trees comes to mind), with trivial code changes and no impact on readability.
Fun part is, it's also trivial to convert one to the other. This is a change which could be made even this late in development. I don't expect it to be, and I can live with XML (I'll have to!), but... well, like I said, grumble-fit.
Cheers! 
(Forum feature request: Lucida Console as a font option. Courier New is hideous, and the other monospace fonts, Andale and Terminal, appear to be broken.)