对于属性我是新手,我读到XML是存储这些的首选方式。但是我注意到,以
的方式编写了一个常规的.properties文件foo=bar
fu=baz
也有效。这意味着更少的打字(也许更容易阅读和更高效)。那么使用XML文件有什么好处呢?
答案 0 :(得分:19)
在XML中,您可以存储比属性文件中更复杂(例如,分层)的数据。所以这取决于你的用例。如果您只想存储少量直接属性,则属性文件更容易处理(尽管Java属性类也可以读取基于XML的属性)。
无论如何,保持配置界面尽可能通用是有意义的,因此如果需要,可以切换到另一个表示(例如,使用Apache Commons Configuration)。
答案 1 :(得分:14)
使用XML文件的最大好处是XML声明了它的编码,而.properties却没有。
如果要将这些属性文件翻译为N种语言,则这些文件可能会以N种不同的编码形式返回。如果你不小心,你或其他人可能会不可逆转地破坏角色编码。
答案 2 :(得分:8)
如果您有大量重复数据,则可以更简单地处理
<connections> <connection>this</connection> <connection>that</connection> <connection>the other</connection> </connections>
比处理
connection1=this connection2=that connection3=the other
特别是如果您希望存储批次数据,或者必须存储在明确的层次结构中
如果你只是存储一些标量值,我每次都会选择简单的属性方法
答案 3 :(得分:4)
如果您同时拥有分层数据和重复名称空间,然后使用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
但是,计算相同的名称属性仍然不能保持特定的父子关系。即。我们如何表示Batgirl是否与The Joker或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
答案 4 :(得分:1)
XML对于复杂的数据结构和/或关系非常方便。它在系统之间拥有“共同语言”的工作做得不错。
然而,xml需要付出代价。它的消耗量很大。您必须加载解析器,确保文件格式正确,找到信息等...
而属性文件非常轻巧且易于阅读。适用于简单的键/值对。
答案 5 :(得分:1)
这取决于您编码的数据。使用XML,您可以在应用程序中定义更复杂的配置数据表示。以struts框架为例。在框架内,您有许多Action类,可以包含1 ... n个前向分支。使用XML配置文件,您可以将其定义为:
<action class="MyActionClass">
<forward name="prev" targetAction="..."/>
<forward name="next" targetAction="..."/>
<forward name="help" targetAction="..."/>
</action>
仅使用属性文件的键值对表示很难实现这种关联。最有可能的是,您需要提出一个分隔符,然后将所有前向动作包含在由此分隔符分隔的单个属性上。对于一个黑客解决方案来说,这是相当多的工作。
然而,正如您所指出的那样,如果您只想表达一些非常简单的内容,例如将功能设置为true,则XML语法会成为负担。
答案 6 :(得分:0)
XML的缺点:
Java属性文件解决了上述问题。一致的命名约定和点符号可以帮助解决层次结构问题。