Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么使用XML作为存储格式?_Php_Xml_Frameworks - Fatal编程技术网

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

Php 为什么使用XML作为存储格式?,php,xml,frameworks,Php,Xml,Frameworks,可能重复: 使用XML作为配置文件的存储格式(如XML)有什么用?我这样问是因为[name Retracted]框架有一个XML配置文件来存储数据库凭据,而构建在该框架上的特定应用程序有一些菜单作为XML片段存储在数据库中。。。我们不会与其他人共享数据库凭据或菜单结构,甚至不会与多个服务共享数据。这都是此应用程序的内部/特定内容。一位同事说XML对于人类来说是一种易读的格式。。。但我不认为这是真的。INI文件中的密码foobar123比foobar123更易于阅读。然后他谈到了解析,但是INI

可能重复:


使用XML作为配置文件的存储格式(如XML)有什么用?我这样问是因为[name Retracted]框架有一个XML配置文件来存储数据库凭据,而构建在该框架上的特定应用程序有一些菜单作为XML片段存储在数据库中。。。我们不会与其他人共享数据库凭据或菜单结构,甚至不会与多个服务共享数据。这都是此应用程序的内部/特定内容。一位同事说XML对于人类来说是一种易读的格式。。。但我不认为这是真的。INI文件中的密码foobar123比foobar123更易于阅读。然后他谈到了解析,但是INI文件已经存在很长时间了,所以我确信有一两个库可以解析它们。我可以看到将其用作数据导出方法背后的逻辑,因为这样一来,应用程序生成的任何内容都可以被其他服务以简单的方式使用,但对于内部内容,我就是不明白。有人请开导我

原因如下:

  • 互操作性(几乎任何东西都可以使用XML,但在一个封闭的系统中,这一点是没有意义的,直到有一天另一个应用程序必须能够读取它)
  • 验证(XSD等)
  • 等级的
实际原因是:

  • 经理喜欢这个流行语&声称“它与XML一起工作”
  • 有太多快乐的人声称“它与XML一起工作”,以至于实际的开发人员开始认为这是一件好事

同样,JSON、YAML、csv或standard.ini等格式都有自己的位置。

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

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

有很多XML解析库,有很多应用程序可以轻松地读取XML,所以如果您想向第三方、API等打开应用程序,这是一种很好的方法

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


XML肯定有一些缺点,臃肿的大小、简单结构之外的复杂性问题以及明文密码,但对于许多快速简单的应用程序/配置,XML工作得很好。

我不会回答您的一般问题(我自己不是一个XML迷),但我将评论您对INI和XML文件的比较


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

其他人也提出了很好的观点,所以我只想补充一点,“人类可读”是主观的。但是当你认为每一个好的编辑器都有完整的XML工具(高亮显示、代码折叠等),并且大多数开发人员由于HTML而使用XML时,我认为XML是非常人类可读的。

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

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

关于速度要求,最好使用
var\u export
将它们存储为有效的PHP来编写它们,并使用
require
来读取它们。有许多框架可以按照这些思路来实现快速配置阅读。只要文件非常小,操作码缓存就可以非常快地读取这些文件。如果速度不是您的首要任务,那么您没有理由不能(也不应该)使用XML、YAML和JSON

config.php

<?
return array( "db_name" => ..., "db_user" => ... );
?>
<?
$db_configure = require( "config.php" );
//do stuff with $db_configure
?>

read-config.php

<?
return array( "db_name" => ..., "db_user" => ... );
?>
<?
$db_configure = require( "config.php" );
//do stuff with $db_configure
?>


清晰是一个原因。看看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>
org.eclipse.platform
XXMaxPermSize
256m
-Xms40m
-Xmx256m
它要详细得多,还使用了一些不同的约定,但它们比ini版本更清晰。起初,我并不完全确定org.eclipse.platform是否与showsplash相关


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

我使用XML是因为我不想每天都编写文件解析器。当内容是XML时,我已经有了一个众所周知的文件解析器


我不想要二进制格式,因为我希望在修复某个问题时能够查看和编辑记事本中的文件。

你在每一点上都是绝对正确的。
XML不用于人类阅读,特别是用于书写。
与其说它是一个时髦词,不如说它是其他任何东西。
而且它只有在数据交换时才有意义


XML唯一的优势来自它的普及——许多解析/验证工具。比如说,在PHP中不能解析来自数据库的ini.style数据(param=value):只有读取文件的函数。尽管您总能找到一些XML工具。所以,原因是:XML是一种标准。它就像PHP:许多人使用它,尽管有许多设计缺陷,但因为有许多优点和强大的社区

当你只有一把锤子时,一切看起来都像钉子。现在,将“锤子”替换为