Depois de usar o xmllint, descobri que podia limpá-lo com duas expressões regulares:
:s/></>\r</g
:%s/<\(.*\)>\n\s*<\/>/<><\/>
e, em seguida, execute gg=G
. O propósito do segundo regex é consertar coisas como:
<a>
</a>
e transforme-os em <a></a>
Parece funcionar bem e não consigo encontrar nenhum dado perdido / desconfigurado. Eu acho que eu poderia fazer tudo isso em uma macro ou algo assim ...