2008-12-08 61 views
2

何时将信息保存在XML文件中以及何时保存在自己格式的文件中是一个好主意?XML或自己格式的文件?

对于XML(或其它标准)我看到:

  • (+)的标准格式。
  • ( - )手工修改很繁琐。

对于自己的格式文件,我看到:

  • ( - ),我们需要建立一个自己的解析器(非标)。
  • (+)可以很容易地手动修改文件。
+0

“自己的格式”你的意思是JSON或YAML或一些完全非标准的格式? – 2008-12-08 11:36:09

回答

12
当它是一个不错的选择以各种方式

使用XML:

  • 需要这些都是能够
  • 自然树形结构
  • 主要数据很容易地处理XML的不同应用程序之间共享以文本形式表示(二进制数据是基于文本格式的一个kludge)
  • 可扩展性很重要
  • 表现不是批评者al(解析XML并不是非常快速 - 尽管如果性能很重要,并且您需要XML,请快速解析器,因为在最快和最慢之间存在很大差异)
  • 架构可以预先定义并且文档可以验证它
  • 更简单的格式(例如名称=值对)不要削减它

基本上,如果在XML中有一个相当自然的数据模型表示形式,那可能是处理它的最简单方法。如果您最终不得不乱用XML来适应它,请考虑其他格式。请注意,除了XML之外,还有很多其他标准(或“有点标准”的格式,例如多平台上的工具支持)。

1

还记得你拥有所有类型的漂亮XML编辑器,这与模式会给你自动完成,语法检查和各种现代编辑津贴,其他格式不完全支持

1

( - )手工修改很繁琐。

我认为这很大程度上取决于您定义的XML /自己的格式。如果你使用例如一个二进制格式(这可能是非常有效的)几乎不可能手动编辑文件。

我认为有其他方面影响的文件格式,如

  • 性能
  • 与其他组件
  • 能力的互操作性手动编辑文件(调试)
  • 向后的选择兼容性问题

如果您打算使用文本格式,我会在大多数情况下选择基于XML的解决方案。

0

正如上面指出的那样,编辑的简易性并不是一个主要问题:XML编辑器有很多优点(对某些人来说是免费的)。

另一个潜在的问题是冗长,尽管大文件的答案是要将它们gzip:在很多语言中,它几乎是透明的。

XML在许多方面都很好:标准定义明确(您不必考虑如何定义字符集,如何转义东西,如何处理特殊情况(多行,二进制等)。 ));它有很多工具(编辑器,解析器,XPath等);与其他工具交换数据是很好的。

如果您的需求非常简单,只能操作Ascii,自给自足(只有这个应用程序会使用这种格式),也许您可​​以使用其他格式。但是在定义你自己的之前,你可以看一下现有的基于文本的格式,比如Json,Yaml,甚至是Lua(原始数据描述语言)或者非常简单的需求,Windows的ini格式或Java的属性。

6

对于XML我看到:

  • (+)标准格式。
  • ( - )手工修改很繁琐。

    我只在API需要时才使用XML。

对于JSON/YAML我看到:

  • (+)的标准格式。
  • (+)很容易手动修改。

    我几乎所有的东西都使用JSON/YAML。除了接口需要其他东西时。

对于CSV我看到:

  • (+)标准格式。
  • (+)很容易手动修改。
  • ( - )当列名变得棘手或者数据不是简单的首字母形式时,它有点模糊。

    我尽可能使用CSV。

对于语言串行器我看到:

  • (+)为给定的语言标准格式。
  • ( - )几乎不可能手工修改。

    我偶尔使用序列化文件来在进程间传递数据,当我确定双方都使用相同的语言时。

对于自己的格式文件,我看到:

  • ( - ),我们需要建立一个自己的解析器(非标)。
  • (+)可以很容易地手动修改文件。

    我避免发明自己的文件格式。多年来还没有发明自己的文件格式。

3

XML为您提供了XSLT和Xpath的强大功能,您自己的格式不支持。

0

通过顺序使用:

  • 属性文件,如果数据可以被表示为键/值
  • CSV如果数据可以被表示为一个表
  • XML如果复杂的结构

对我来说XML的缺点可以是解析器的性能,当数据很重要时XML文件的大小可以成为一个障碍(很多编辑器很难打开几MB的XML文件)

1

我的经验法则是:如果我需要转换或验证它,或者我将需要与我不控制的应用程序域共享数据,我首先考虑XML,然后如果我不是,我不会。

编辑:

我忘了在一般的文本和Unicode尤其是:如果我的数据的显著部分是文字(尤其是标记文本),如果我需要支持Unicode(其任何使用文本块的应用程序通常都会这样做),它将XML快速移动到列表中。

0

annakata所述,如果您选择XML路由,则可以使用XSLT和XPATH。我发现,通过巧妙地使用XSLT,您可以创建“自我记录”配置文件。

通过创建一个.xsl文件并向XML文件中添加这样的声明,用户可以简单地双击XML文件并在其浏览器中查看转换的结果(我知道IE和Firefox都支持这)

<?xml-stylesheet type="text/xsl" href="config-documentation.xsl"?> 

只是认为这可能会有所帮助。

0

XML通常是我的第一选择。部分原因是因为它是我的平台选择(.NET)的标准配置文件格式。我发现几乎完全是定义明确的XML文件比自定义格式更好。我也会避开CSV和平面文件,除非它们是项目的要求。

我对XML作为我选择的理由(请注意,有些特定平台):

  • 标准实现我的平台。大量的工具可用于处理XML,XSD和XSLT。

  • 模式执行(XSD)。允许我执行文件结构。格式被其他人使用时非常有用。

  • 导航(XPath,Linq到Xml)。易于提取和编写节点及其属性。将这种类型的代码写在客户读者和作者身上的风险较小。

  • Transformable(XSLT)。可以毫不费力地将文件转换为其他表示视图。

  • 可互操作。 XML的结构非常适合描述对象。序列化为XML的对象很容易移植,并可跨越应用程序边界生存。

  • 轻松编辑。定义明确的XML易于阅读并易于编辑。一个简单的文本编辑器就足以开始使用了,并且有许多XML编辑工具可用于各种功能和价格点。

我不明白这样的看法,即XML比自定义格式更容易手工修改。 XML可能比您想出的格式更冗长,但它提供了与其包含的数据的上下文相关性。如果您可以查看(格式良好的)XHTML,那么查看XML时并没有多大区别。

0

这实际上取决于您的数据。

参见ESR的The Art of Unix Programming: Ch. 5 Textuality - Data File Metaformats。以下引用总结:

XML可以是一个简单的选择或一个复杂的选择。围绕它有很多炒作,但不要不加批判地采纳或拒绝它,成为时尚的受害者。谨慎选择,并牢记KISS原则。

XML肯定有它的用途,它是精彩表达复杂的分层数据集,但它是矫枉过正,如果你需要做的是存储半打key:value对,不适合基于行的表格数据。