gaarf / xml-to-php-array
此包最新版本(v1.0)没有可用的许可信息。
XML转PHP数组转换器
v1.0
2019-10-08 18:51 UTC
Requires
- php: >=7.1.0
- ext-dom: *
This package is auto-updated.
Last update: 2024-08-29 05:19:06 UTC
README
智能工具,将您的XML转换为PHP数组。
安装并简单使用
使用Composer
composer require gaarf/xml-to-php-array
然后,该包将自动安装到您的项目中,您可以直接调用
$resultArray = Convertor::covertToArray($xml);
文档
在PHP开发中,一个常见的需求是将XML文档转换为可序列化的数组。如果您曾经尝试过序列化()然后反序列化SimpleXML或DOMDocument对象,您就知道我在说什么了。
假设以下XML片段
<tv> <show name="Family Guy"> <dog>Brian</dog> <kid>Chris</kid> <kid>Meg</kid> </show> </tv>
有一种快速简便的方法可以将此类文档转换为数组,使用类型转换和JSON函数以确保在反序列化时没有引起问题的异类值
$a = json_decode(json_encode((array) Convertor::covertToArray($s)), true);
以下是我们的示例XML的结果,例如,如果我们print_r($a)
Array
(
[show] => Array
(
[@attributes] => Array
(
[name] => Family Guy
)
[dog] => Brian
[kid] => Array
(
[0] => Chris
[1] => Meg
)
)
)
相当巧妙,对吧?但也许我们想嵌入一些HTML标签或其他类似的东西。那么我们需要一个CDATA节点……
<tv> <show name="Family Guy"> <dog>Brian</dog> <kid>Chris</kid> <kid>Meg</kid> <kid><![CDATA[<em>Stewie</em>]]></kid> </show> </tv>
上面的XML片段会产生以下结果
Array
(
[show] => Array
(
[@attributes] => Array
(
[name] => Family Guy
)
[dog] => Brian
[kid] => Array
(
[0] => Chris
[1] => Meg
[2] => Array
(
)
)
)
)
这并不很有用。我们遇到了麻烦,因为CDATA节点,一个SimpleXMLElement,被转换为数组而不是字符串。为了处理这种情况同时仍然保留@attributes的好记法,我们需要一个稍微详细一些的转换函数。这是我版本,在此以下授权,但请不要起诉我。
对于我们的Stewie片段的结果
Array
(
[show] => Array
(
[@attributes] => Array
(
[name] => Family Guy
)
[dog] => Brian
[kid] => Array
(
[0] => Chris
[1] => Meg
[2] => <em>Stewie</em>
)
)
)
胜利属于我! :D
贡献
[clh-code#1] 如果一个节点有属性,但只包含文本,那么输出将是一个包含@content
和@attributes
键的数组
[reggi#4] 将根元素标签名存储在@root
[janbarasek#13] 为PHP 7.1 +添加支持,改进代码风格。
[janbarasek#15] 将存储库重写为Composer包。
[roland-d#18] 将空节点视为字符串