You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数组转XML格式不符,如何添加<cd>节点实现预期结构?

解决PHP数组转指定结构XML的问题

原代码的问题分析

  1. 函数名不匹配:调用的event_to_xm和定义的event_to_xml名称不一致,会直接触发报错
  2. 多余的JSON解码:$array = json_decode($array,TRUE);完全没必要——传入的参数已经是PHP数组,这行代码会把数组转为null,导致后续循环无法正常执行
  3. 循环逻辑错误:没有为每个事件条目创建<cd>包裹节点,直接把所有字段平铺到<Event>根节点下,不符合预期的层级结构

修正后的完整代码

<?php
// 你的原始数组
$array = [
    1 => [
        2000307 => [
            'eventid' => 2000307,
            'eveseq' => 100,
            'fee' => 200
        ],
        2000310 => [
            'eventid' => 2000310,
            'eveseq' => 101,
            'fee' => 300
        ]
    ]
];

// 初始化XML根节点
$xml = new SimpleXMLElement('<Event/>');

// 修正后的转换函数
function event_to_xml($array, &$xml) {
    // 遍历外层数组(对应你的[1]节点)
    foreach($array as $outerItem) {
        // 遍历每个事件条目(2000307、2000310)
        foreach($outerItem as $eventData) {
            // 为每个事件创建<cd>节点
            $cdNode = $xml->addChild('cd');
            // 遍历事件的字段,添加到<cd>节点下
            foreach($eventData as $key => $value) {
                $cdNode->addChild($key, htmlspecialchars($value));
            }
        }
    }
}

// 执行转换
event_to_xml($array, $xml);

// 生成XML字符串并保存(或直接输出)
$xmlString = $xml->asXML();
file_put_contents('event.xml', $xmlString);

// 输出验证
echo $xmlString;
?>

代码说明

  • 移除了多余的json_decode操作,直接操作原始PHP数组
  • 新增<cd>节点的创建逻辑:遍历到每个事件数据时,先给根节点<Event>添加<cd>子节点,再把该事件的所有字段挂载到这个<cd>节点下
  • 修正了函数名不匹配的低级错误

关于你尝试的错误代码

你后来写的$xml=new SimpleXMLElement("event.xml", 0, TRUE);报错,是因为如果event.xml文件不存在,或者文件内的XML结构没有<event>节点,$xml->event[0]会返回null,自然无法调用addChild。这种事后修改XML的方式,远不如在生成阶段直接构建正确结构高效。

内容的提问来源于stack exchange,提问作者C123D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:10:45