macropage / xml-to-php-array
XML到PHP数组转换器
Requires
- php: >=7.1.0
- ext-dom: *
This package is auto-updated.
Last update: 2024-09-08 07:39:06 UTC
README
仅作为一个分支:gaarf/XML-string-to-PHP-array - 但可通过 https://packagist.org.cn/ 访问
XML到PHP数组转换器
智能工具,将XML转换为PHP数组。
安装并简单使用
使用Composer
composer require macropage/xml-to-php-array
然后软件包将自动安装到您的项目中,您可以直接调用
$resultArray = Convertor::covertToArray($xml);
文档
在PHP工作中,一个常见的需求是将XML文档转换为可序列化数组的方法。如果您曾经尝试过对SimpleXML或DOMDocument对象进行serialize()和unserialize()操作,您就了解我在说什么。
假设以下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表示法,我们需要一个稍微冗长的转换函数。这是我的版本,现在以do-whatever-but-dont-sue-me许可证发布。
对于我们的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软件包。