baraja-core/xml-to-php-array

该包的最新版本(v2.1.1)没有提供许可证信息。

XML到PHP数组转换器

v2.1.1 2022-09-12 07:35 UTC

README

智能工具,将您的XML转换为PHP数组。

这是从gaarf/XML-string-to-PHP-array分支出来的。

安装和使用

使用Composer

composer require baraja-core/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