а всё дело в том, что к валидному XML применять (в частности) регэкспы гораздо легче, чем к HTML. а ещё - его легче (*) генерировать. его можно "разложить" на дерево объектов и "свернуть" обратно. ну, раз так, то и броузер пусть жрёт XHTML, раз мне так удобнее.
при этом я не пользуюсь никакими вариациями XSLT, почти никогда не пользуюсь expat или domxml. всё руками, всё быстро и реактивно, всё просто, эффективно и красиво. просто XML. просто объекты. регистр тегов - всегда нижний. параметры всегда в кавычках. если это "br", то в конце всегда стоит "/". короче, полный рулез.

(*) есть <тег параметр=значение>. у меня шиза доходила до того, (**) что я раньше проверял, нет ли в значении параметра "плохих" символов, и, в зависимости от этого, ставил значение параметра в кавычки или выводил так.
(**) да, я знаю, я гоню.