Berserker прав. Я как-то писал свой парсер по стандарту XML 1.0. На первый взгляд язык разметки достаточно простой, но это обманчивое впечатление. Взять хотя бы такую штуку как
DTD, из-за которой я это дело бросил. Она есть даже в
первой версии стандарта. При несоответствии документа указанному DTD парсер
обязан выдать ошибку (
well-formedness constraint). Если бы это было опцией, я бы ещё понял, но... если парсер этого не умеет, он не поддерживает XML 1.0.
Соответственно, для действительно эффективной работы нужно изобретать подмножества XML. Зачем? Будут ли они совместимы с чем-либо и до какой степени? К тому же в XML оверхед всегда получается ого-го какой - и по объёму данных, и по времени на их обработку и проверку ("все ли тэги правильно закрыты?" и т.п.). Чего стоит только требование (постоянно нарушаемое по очевидным причинам) данные всегда размещать внутри тэга, а не в параметрах. Хотите, чтобы внятно и читабельно было, используйте длинные идентификаторы, но будьте любезны писать полностью: <FirstDataPoint>1.0</FirstDataPoint>.
Представьте себе данные графика:
<X>1.0</X><Y>1.0</Y>
<X>2.0</X><Y>1.0</Y>
<X>3.0</X><Y>1.0</Y>
<X>4.0</X><Y>1.0</Y>
Мусора вдвое больше, чем, собственно, данных.
Чтобы этого избежать, начинают придумывать всякие фокусы с параметрами:
<GUIConfig name="TabBar" dragAndDrop="yes" drawTopBar="yes" drawInactiveTab="yes" reduce="yes" closeButton="no" doubleClick2Close="no" vertical="no" multiLine="yes" hide="no" />
<GUIConfig name="TabSetting" size="3" replaceBySpace="yes" />
Всё запихали в параметры, а по содержанию, собственно, XML-документа получили кучку пустых тэгов GUIConfig. А что в результате-то? А в результате тот же ini-файл и получили, только секции в строчку записаны, да всякие неугодные символы вынуждены были закодировать (типа < или "). А в ini-формате-то таких спецсимволов только один - перевод строки.
[TabBar]
dragAndDrop=yes
drawTopBar=yes
drawInactiveTab=yes
reduce=yes
closeButton=no
doubleClick2Close=no
vertical=no
multiLine=yes
hide=no
[TabSetting]
size=3
replaceBySpace=yes
XML - это формат для сферического экспорта данных в вакуум, но не для работы. Ну, и дань моде, конечно же.