PHP数组转XML格式不符,如何添加<cd>节点实现预期结构?
解决PHP数组转指定结构XML的问题
原代码的问题分析
- 函数名不匹配:调用的
event_to_xm和定义的event_to_xml名称不一致,会直接触发报错 - 多余的JSON解码:
$array = json_decode($array,TRUE);完全没必要——传入的参数已经是PHP数组,这行代码会把数组转为null,导致后续循环无法正常执行 - 循环逻辑错误:没有为每个事件条目创建
<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
相关产品推荐
相关产品推荐

