XML或自己格式的文件?

时间:2008-12-08 11:34:38

标签: xml file

什么时候将信息保存在XML文件中以及在自己的格式文件中时最好?

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

  • (+)标准格式。
  • ( - )手动修改很乏味。

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

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

12 个答案:

答案 0 :(得分:12)

在适合各种方式时使用XML:

  • 需要在能够处理XML的不同应用程序之间共享
  • 天然树状结构
  • 主要数据很容易表示为文本(二进制数据有点像基于文本的格式)
  • 可扩展性非常重要
  • 性能并不重要(解析XML的速度并不是非常快 - 尽管如果性能很重要而且你选择XML,那么请选择快速解析器,因为最快和最慢之间存在很大差异)
  • 可以预先定义架构,并可以对其进行验证
  • 更简单的格式(例如名称=值对)不会削减它

基本上,如果XML中的数据模型非常自然,那么这可能是处理它的最简单方法。如果您最终不得不陷入困境以适应XML,请考虑其他格式。请注意,除了XML之外,还有许多其他标准(或“有些标准” - 例如由多个平台上的工具支持)格式。

答案 1 :(得分:6)

对于XML,我看到:

  • (+)标准格式。
  • ( - )手动修改很乏味。

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

对于JSON / YAML,我看到:

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

    我几乎用所有东西都使用JSON / YAML。除非界面需要其他内容。

对于CSV,我看到:

  • (+)标准格式。
  • (+)手动修改很容易。
  • ( - )当列名称很复杂或数据不是简单的第一种形式时,它有点模糊。

    尽可能使用CSV。

对于语言序列化程序,我看到:

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

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

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

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

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

答案 2 :(得分:3)

XML为您提供了XSLT和Xpath的强大功能,而您自己的格式则没有。

答案 3 :(得分:2)

答案 4 :(得分:1)

还记得你有各种漂亮的XML编辑器,模式会给你自动完成,语法检查和各种现代编辑特权,其他格式不完全支持

答案 5 :(得分:1)

  

( - )手动修改很乏味。

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

我认为还有其他方面会影响文件格式的选择,例如

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

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

答案 6 :(得分:1)

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

修改

我一般忘记了文本,特别是Unicode:如果我的数据的很大一部分是文本(特别是标记文本),并且我需要支持Unicode(任何处理文本块的应用程序通常都会),将XML快速上传到列表中。

答案 7 :(得分:0)

如上所述,编辑的简易性并不是一个主要问题:有许多优秀的(并且对某些人来说是免费的)XML编辑器。

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

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

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

答案 8 :(得分:0)

按顺序我使用:

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

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

答案 9 :(得分:0)

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

通过创建.xsl文件并向XML文件添加此类声明,用户只需双击XML文件并在浏览器中查看转换结果(我知道IE和Firefox都支持这个)

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

想到这可能会有所帮助。

答案 10 :(得分:0)

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

我选择XML的原因(请注意,有些是特定于平台的):

  • 我平台的标准实施。可以使用大量工具来处理XML,XSD,XSLT。

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

  • 导航(XPath,Linq to Xml)。易于提取和写入节点及其属性。将此类代码写入客户读者和作者的风险较小。

  • 可转换(XSLT)。可以轻松地将文件转换为其他表示视图。

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

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

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

答案 11 :(得分:0)

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

参见ESR的The Art of Unix Programming: Ch. 5 Textuality - Data File Metaformats。这句话总结了一下:

XML可以是简化选择或复杂选择。围绕着它有很多炒作,但不要不加批判地采用或拒绝它而成为时尚的受害者。请仔细选择并牢记KISS原则。

XML当然有其用途,并且精彩用于表达复杂的分层数据集,但如果你需要做的只是存储六个key:value对,那就太过分了。基于行的表格数据。