PHP如何将数组转换为XML_PHP将数组转换为XML方法

使用SimpleXMLElement递归处理数组,将键值转为XML标签,数字键统一为item标签,htmlspecialchars防止特殊字符破坏结构,最终生成标准XML。

PHP将数组转换为XML的方法主要通过递归遍历数组,并使用PHP内置的SimpleXMLElement类来构建XML结构。这种方法适用于关联数组或多重嵌套数组,能灵活生成标准格式的XML数据。

使用SimpleXMLElement递归生成XML

这是最常用且高效的方式。通过创建一个空的SimpleXMLElement对象,然后递归地添加数组中的键和值。

示例代码:

function arrayToXml($array, &$xml) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $subnode = $xml->addChild("$key");
            arrayToXml($value, $subnode);
        } else {
            $xml->addChild("$key", htmlspecialchars("$value"));
        }
    }
}

// 使用示例
$data = [
    'name' => '张三',
    'age'  => 25,
    'address' => [
        'city'  => '北京',
        'zip'   => '100001'
    ]
];

$xml = new SimpleXMLElement('');
arrayToXml($data, $xml);
echo $xml->asXML();

输出结果为:



  张三
  25
  
    北京
    100001
  

处理索引数组(数字键)

当数组包含数字键时,直接使用键名可能不符合XML命名规范。建议为这些元素设置统一标签名,如

改进示例:

function arrayToXml($array, &$xml) {
    foreach ($array as $key => $value) {
        if (is_numeric($key)) {
            $key = 'item'; // 数字键统一用 item 标签
        }
        if (is_array($value)) {
            $subnode = $xml->addChild($key);
            arrayToXml($value, $subnode);
        } else {
            $xml->addChild($key, htmlspecialchars("$value"));
        }
    }
}

这样可以避免生成类似...的非法标签(虽然XML允许,但不利于解析)。

直接返回XML字符串

封装成独立函数,便于调用:

function convertArrayToXml($array) {
    $xml = new SimpleXMLElement('');
    arrayToXml($array, $xml);
    return $xml->asXML();
}

调用convertArrayToXml($data)即可获得完整XML字符串。

基本上就这些。注意使用htmlspecialchars防止特殊字符破坏XML结构,同时确保数组中不含对象或其他不可遍历类型。