何时将信息保存在XML文件中以及何时保存在自己格式的文件中是一个好主意?XML或自己格式的文件?
对于XML(或其它标准)我看到:
- (+)的标准格式。
- ( - )手工修改很繁琐。
对于自己的格式文件,我看到:
- ( - ),我们需要建立一个自己的解析器(非标)。
- (+)可以很容易地手动修改文件。
何时将信息保存在XML文件中以及何时保存在自己格式的文件中是一个好主意?XML或自己格式的文件?
对于XML(或其它标准)我看到:
对于自己的格式文件,我看到:
使用XML:
基本上,如果在XML中有一个相当自然的数据模型表示形式,那可能是处理它的最简单方法。如果您最终不得不乱用XML来适应它,请考虑其他格式。请注意,除了XML之外,还有很多其他标准(或“有点标准”的格式,例如多平台上的工具支持)。
还记得你拥有所有类型的漂亮XML编辑器,这与模式会给你自动完成,语法检查和各种现代编辑津贴,其他格式不完全支持
( - )手工修改很繁琐。
我认为这很大程度上取决于您定义的XML /自己的格式。如果你使用例如一个二进制格式(这可能是非常有效的)几乎不可能手动编辑文件。
我认为有其他方面影响的文件格式,如
如果您打算使用文本格式,我会在大多数情况下选择基于XML的解决方案。
正如上面指出的那样,编辑的简易性并不是一个主要问题:XML编辑器有很多优点(对某些人来说是免费的)。
另一个潜在的问题是冗长,尽管大文件的答案是要将它们gzip:在很多语言中,它几乎是透明的。
XML在许多方面都很好:标准定义明确(您不必考虑如何定义字符集,如何转义东西,如何处理特殊情况(多行,二进制等)。 ));它有很多工具(编辑器,解析器,XPath等);与其他工具交换数据是很好的。
如果您的需求非常简单,只能操作Ascii,自给自足(只有这个应用程序会使用这种格式),也许您可以使用其他格式。但是在定义你自己的之前,你可以看一下现有的基于文本的格式,比如Json,Yaml,甚至是Lua(原始数据描述语言)或者非常简单的需求,Windows的ini格式或Java的属性。
对于XML我看到:
( - )手工修改很繁琐。
我只在API需要时才使用XML。
对于JSON/YAML我看到:
(+)很容易手动修改。
我几乎所有的东西都使用JSON/YAML。除了接口需要其他东西时。
对于CSV我看到:
( - )当列名变得棘手或者数据不是简单的首字母形式时,它有点模糊。
我尽可能使用CSV。
对于语言串行器我看到:
( - )几乎不可能手工修改。
我偶尔使用序列化文件来在进程间传递数据,当我确定双方都使用相同的语言时。
对于自己的格式文件,我看到:
(+)可以很容易地手动修改文件。
我避免发明自己的文件格式。多年来还没有发明自己的文件格式。
XML为您提供了XSLT和Xpath的强大功能,您自己的格式不支持。
通过顺序使用:
对我来说XML的缺点可以是解析器的性能,当数据很重要时XML文件的大小可以成为一个障碍(很多编辑器很难打开几MB的XML文件)
我的经验法则是:如果我需要转换或验证它,或者我将需要与我不控制的应用程序域共享数据,我首先考虑XML,然后如果我不是,我不会。
编辑:
我忘了在一般的文本和Unicode尤其是:如果我的数据的显著部分是文字(尤其是标记文本),如果我需要支持Unicode(其任何使用文本块的应用程序通常都会这样做),它将XML快速移动到列表中。
如annakata所述,如果您选择XML路由,则可以使用XSLT和XPATH。我发现,通过巧妙地使用XSLT,您可以创建“自我记录”配置文件。
通过创建一个.xsl文件并向XML文件中添加这样的声明,用户可以简单地双击XML文件并在其浏览器中查看转换的结果(我知道IE和Firefox都支持这)
<?xml-stylesheet type="text/xsl" href="config-documentation.xsl"?>
只是认为这可能会有所帮助。
XML通常是我的第一选择。部分原因是因为它是我的平台选择(.NET)的标准配置文件格式。我发现几乎完全是定义明确的XML文件比自定义格式更好。我也会避开CSV和平面文件,除非它们是项目的要求。
我对XML作为我选择的理由(请注意,有些特定平台):
标准实现我的平台。大量的工具可用于处理XML,XSD和XSLT。
模式执行(XSD)。允许我执行文件结构。格式被其他人使用时非常有用。
导航(XPath,Linq到Xml)。易于提取和编写节点及其属性。将这种类型的代码写在客户读者和作者身上的风险较小。
Transformable(XSLT)。可以毫不费力地将文件转换为其他表示视图。
可互操作。 XML的结构非常适合描述对象。序列化为XML的对象很容易移植,并可跨越应用程序边界生存。
轻松编辑。定义明确的XML易于阅读并易于编辑。一个简单的文本编辑器就足以开始使用了,并且有许多XML编辑工具可用于各种功能和价格点。
我不明白这样的看法,即XML比自定义格式更容易手工修改。 XML可能比您想出的格式更冗长,但它提供了与其包含的数据的上下文相关性。如果您可以查看(格式良好的)XHTML,那么查看XML时并没有多大区别。
这实际上取决于您的数据。
参见ESR的The Art of Unix Programming: Ch. 5 Textuality - Data File Metaformats。以下引用总结:
XML可以是一个简单的选择或一个复杂的选择。围绕它有很多炒作,但不要不加批判地采纳或拒绝它,成为时尚的受害者。谨慎选择,并牢记KISS原则。
XML肯定有它的用途,它是精彩表达复杂的分层数据集,但它是矫枉过正,如果你需要做的是存储半打key:value
对,不适合基于行的表格数据。
“自己的格式”你的意思是JSON或YAML或一些完全非标准的格式? – 2008-12-08 11:36:09