为什么使用XML作为存储格式?

时间:2010-07-19 23:03:53

标签: php xml frameworks

  

可能重复:
  When is it OK to use an XML file to save information?

使用XML作为配置文件的存储格式的一切是什么?我问,因为[name retraced]框架有一个XML配置文件来存储数据库凭据,并且构建在框架上的特定应用程序将一些菜单存储为数据库中的XML片段...它不像我们分享数据库凭证或与其他人的菜单结构,甚至是多个服务将使用的数据。这是所有内部/特定的应用程序。一位同事说,XML是一种易于阅读的人类格式......但我不认为这是真的。 INI文件中的密码foobar123比< password> foobar123< / password>更容易让人阅读。然后他谈到解析,但是INI文件已经存在了很长时间,所以我确定有一两个库用于解析它们。我可以看到将其用作数据导出方法背后的逻辑,因为随后应用程序产生的任何内容都可以以直接的方式被其他服务使用,但对于内部内容我只是不明白。有人请赐教。

8 个答案:

答案 0 :(得分:5)

我不会解决你的一般性问题(我自己不是一个巨大的XML粉丝),但我会评论你对INI和XML文件的比较。

XML擅长描述任意结构化数据(树等)。 INI文件最好地描述了分类字典类型数据(键,值对)。对于您给出的菜单系统的具体示例,XML是一个更好的选择,因为它可以直接反映菜单树。

答案 1 :(得分:3)

其他人已经提出了很好的观点,所以我只想补充说“人类可读”是主观的。但是当你考虑到每个好的编辑器都有完整的XML工具(突出显示,代码折叠等)以及大多数开发人员都习惯使用XML时,我认为XML非常易读。

答案 2 :(得分:2)

原因应该是:

  • 互操作性(几乎所有人都可以谈论XML,但在一个封闭的系统中,这一点没有意义,直到另一个应用程序必须能够读取它为止)
  • 验证(XSD等)
  • 分层

实际原因:

  • 经理喜欢流行语&声称'它适用于XML'
  • 有很多快乐的人声称'它与XML一起工作',实际的开发人员认为这是一件好事

然后,JSON,YAML,csv或standard .ini等格式都有自己的位置。

答案 3 :(得分:2)

一般来说,如果您需要调试或更新项目,XML格式很容易手动检查。

此外,XML文档的结构非常适合嵌套菜单,可以很容易地将其解析为TreeView类型结构或简单的表结构,因此您可以快速创建“可移植数据库”来解析/操作/保存为您的应用程序。

有很多XML解析库,而且很多应用程序都会以最小的麻烦读取XML,所以如果你想打开你的应用程序给第三方,API等,这就是一个很好的方法。它

最后,通过在XSLT中使用XML,您可以快速将数据转换为各种格式,这是使用相同数据并将其呈现在网页,RSS阅读器,移动设备等上的理想方式。

XML肯定存在一些缺点,容易出现大小,复杂问题超出简单结构,并且密码以明文形式出现,但对于许多快速简单的应用程序/配置,XML可以很好地工作。

答案 4 :(得分:0)

我发现这是因为不同的技术,如不同的格式,补充了他们的编码风格。例如,java倾向于使用XML,因为它能够使用命名空间和版本控制来分解数据。 javascript倾向于使用JSON来存储数据,因为它简单/快速/易于理解。

PHP没有一种用于存储数据的标准编码。

关于速度是必需的,最好将它们存储为有效的PHP,使用var_export来编写它们,并require来读取它们。有许多框架可以在这些方面做一些事情来快速配置读取。只要文件非常小,操作码缓存就会非常快速地保存对这些文件的任何读取。虽然如果速度不是你的首要任务,你没有理由不(也不应该)使用XML,YAML,JSON。

的config.php

<?
return array( "db_name" => ..., "db_user" => ... );
?>

读的config.php

<?
$db_configure = require( "config.php" );
//do stuff with $db_configure
?>

答案 5 :(得分:0)

清晰度是一个原因。看看这个用于eclipse的.ini文件。

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m

就在那里,我们有几个不同的约定。如果将其设置为以下内容将会更加明显:

<showsplash>org.eclipse.platform</showsplash>
<launcher-param>
    <param-name>XXMaxPermSize</param-name>
    <param-value>256m</param-value>
</launcher-param>
<vmargs>
    <arg>-Xms40m</arg>
    <arg>-Xmx256m</arg>
</vmargs>

它更加冗长,它也使用了一些不同的约定,但它们比ini版本更清晰。起初,我并不完全确定org.eclipse.platform与showsplash有关。

我倾向于同意,尽管XML有点过度使用。

答案 6 :(得分:0)

我使用XML因为我不想写du-jour文件解析器。当内容是XML时,我已经拥有一个众所周知的文件解析器。

我不想要二进制格式,因为我想在修复内容时​​能够在记事本中查看和编辑文件。

答案 7 :(得分:0)

在每一点上你都是对的。
XML不适合人类阅读,尤其是写作 它比其他任何东西都更流行 只有数据交换才有意义。

唯一的XML优势来自它的受欢迎程度 - 许多解析/验证工具。比方说,在PHP中,无法解析来自数据库的ini.style数据(param = value):只有读取文件的功能。虽然您总能找到一些XML工具。所以,原因是:XML是一个标准。它就像PHP:很多人使用它尽管有许多设计缺陷,但因为有许多优点和强大的社区。