В XML вы можете хранить более сложные (например, иерархические) данные, чем в файле свойств. Так что это зависит от вашего варианта использования. Если вы просто хотите сохранить небольшое количество прямых свойств, с файлом свойств будет проще работать (хотя класс свойств Java также может читать свойства на основе XML).
Было бы разумно сохранить ваш интерфейс конфигурации как можно более общим. тем не мение,
Самым большим преимуществом использования XML-файла является то, что XML декларирует свою кодировку, а .properties - нет.
Если вы переводите эти файлы свойств на N языков, возможно, что эти файлы могут быть возвращены в N различных кодировках. И если вы не будете осторожны, вы или кто-то другой можете необратимо испортить кодировки символов.
Если у вас много повторяющихся данных, может быть проще обработать
<connections> <connection>this</connection> <connection>that</connection> <connection>the other</connection> </connections>
, чем обрабатывать
connection1=this connection2=that connection3=the other
, особенно если вы ожидаете, что вам придется хранить партию данных, или они должны храниться в определенной иерархии
Если вы просто сохраняете несколько скалярных значений, я бы каждый раз использовал простой подход свойств
XML удобен для сложных структур данных и / или отношений. Он отлично справляется с тем, чтобы иметь «общий язык» между системами.
Однако xml имеет свою цену. Его тяжело потреблять. Вы должны загрузить синтаксический анализатор, убедиться, что файл имеет правильный формат, найти информацию и т. Д.
В то время как файлы свойств довольно легкие и легко читаются. Работает для простых пар ключ / значение.
Это зависит от данных, которые вы кодируете. С помощью XML вы можете определить более сложное представление данных конфигурации в вашем приложении. В качестве примера возьмем что-то вроде каркаса распорок. Внутри фреймворка есть несколько классов Action, которые могут содержать от 1 до n прямых веток. С помощью файла конфигурации XML вы можете определить его следующим образом:
<action class="MyActionClass">
<forward name="prev" targetAction="..."/>
<forward name="next" targetAction="..."/>
<forward name="help" targetAction="..."/>
</action>
Этот вид ассоциации трудно выполнить, используя только представление пары ключ-значение файла свойств. Скорее всего, вам нужно будет придумать символ-разделитель, а затем включить все действия вперед в одно свойство, разделенное этим символом-разделителем. Это довольно большая работа для хакерского решения.
Тем не менее, как вы отметили, синтаксис XML может стать обузой, если вы просто хотите указать что-то очень простое,
Если у вас есть и иерархические данные, и повторяющиеся пространства имен, используйте XML.
1) Чтобы имитировать только иерархическую структуру в файле свойств, просто используйте точечную нотацию:
a.b=The Joker
a.b.c=Batgirl
a.b=Batman
a.b=Superman
a.b.c=Supergirl
Итак, сложное (иерархическое) представление данных * не является причиной использования xml.
2) Для простого повторения данных мы можем использовать стороннюю библиотеку, такую как ini4j, чтобы явно привязать в java идентификатор счетчика к неявному квантификатору в самом файле свойств.
a.b=The Joker
a.b=Batgirl
a.b=Batman
преобразуется в (в фоновом режиме)
a.b1=The Joker
a.b2=Batgirl
a.b3=Batman
Однако нумерация свойств с одним и тем же именем по-прежнему не поддерживает определенные отношения родитель-потомок. т.е. как мы представляем, будет ли Бэтгерл с Джокером или Бэтменом?
Итак, xml требуется, когда требуются обе функции. Теперь мы можем решить, является ли первая запись xml тем, что мы хотим, или второй.
[a]
[b]Joker[/b]
[b]
[c]Batgirl[/c]
[/b]
[a]
- или -
[a]
[b]Batman[/b]
[b]
[c]Batgirl[/c]
[/b]
[/a]
Подробнее см. В .... http://ilupper.blogspot.com/2010/05/xml-vs-properties.html