插件窝 干货文章 php数组转换xml

php数组转换xml

数组 XML 递归 arrayToXml 802    来源:    2025-03-19

在PHP中,将数组转换为XML格式可以通过多种方式实现。以下是一个简单的示例,展示如何将PHP数组转换为XML格式。

示例代码

<?php
function arrayToXml($array, $rootElement = null, $xml = null) {
    // 如果$xml参数为null,则创建一个新的SimpleXMLElement对象
    if ($xml === null) {
        $xml = new SimpleXMLElement($rootElement !== null ? $rootElement : '<root/>');
    }

    // 遍历数组
    foreach ($array as $key => $value) {
        // 如果值是数组,则递归调用arrayToXml函数
        if (is_array($value)) {
            arrayToXml($value, $key, $xml->addChild($key));
        } else {
            // 否则,直接将值添加到XML中
            $xml->addChild($key, htmlspecialchars($value));
        }
    }

    return $xml->asXML();
}

// 示例数组
$array = [
    'user' => [
        'name' => 'John Doe',
        'email' => 'john.doe@example.com',
        'address' => [
            'street' => '123 Main St',
            'city' => 'Anytown',
            'state' => 'CA',
            'zip' => '12345'
        ]
    ]
];

// 将数组转换为XML
$xml = arrayToXml($array, '<users/>');

// 输出XML
echo $xml;
?>

输出结果

<users>
    <user>
        <name>John Doe</name>
        <email>john.doe@example.com</email>
        <address>
            <street>123 Main St</street>
            <city>Anytown</city>
            <state>CA</state>
            <zip>12345</zip>
        </address>
    </user>
</users>

代码解释

  1. arrayToXml 函数:这是一个递归函数,用于将数组转换为XML格式。它接受三个参数:

    • $array:要转换的数组。
    • $rootElement:XML的根元素名称(可选)。
    • $xml:当前的SimpleXMLElement对象(可选)。
  2. SimpleXMLElement:这是PHP内置的一个类,用于创建和操作XML文档。

  3. 递归处理:如果数组中的某个值仍然是数组,则递归调用arrayToXml函数,直到所有嵌套数组都被处理完毕。

  4. htmlspecialchars:用于将特殊字符转换为XML实体,以避免XML解析错误。

注意事项

  • 如果数组中的键名包含非法字符(如空格或特殊字符),可能会导致XML生成失败。在这种情况下,你可能需要对键名进行适当的处理或替换。
  • 生成的XML文档可以通过$xml->asXML()方法输出为字符串,也可以直接保存到文件中。

扩展

你可以根据需要扩展这个函数,例如添加属性、处理更复杂的数组结构等。