新手求助高手解决 PHP数组转换XML问题,研究好久都不行.

<?php$team=array('id'=>'22955','video_order_id'=>'22955','is_audio'=>'0','status_form... <?php
$team=array(
'id' => '22955',
'video_order_id' => '22955',
'is_audio' => '0',
'status_format' => '待审核',

'ftp_path' => '2013/1374/5695/2479/137456952479.ssm/',array('PreviewMTA'=>'A'),
array('PreviewMTA'=>'B'));
$xmlf = 'index2.xml';

function arrtoxml($arr,$flie,$dom=0,$item=0){
if (!$dom){
$dom = new DOMDocument("1.0","utf-8");
}
if(!$item){
$item = $dom->createElement("RegisterMMObjectRequest");
$dom->appendChild($item);
}

foreach ($arr as $key=>$val){
//$itemx = $dom->createElement(is_string($key)?$key:"PreviewMTA");
if(is_string($key)){ $itemx = $dom->createElement($key);
$item->appendChild($itemx);}
if (!is_array($val)){
$text = $dom->createTextNode($val);
$itemx->appendChild($text);
}
elseif (is_array($val)){
foreach ($val as $keys=>$vals)

$itemxx=$dom->createElement($keys);
$item->appendChild($itemxx);
if (!is_array($vals)){
$text = $dom->createTextNode($vals);
$itemxx->appendChild($text);

}
}
else {
arrtoxml($val,$dom,$itemx);
}
}
return $dom->save($flie);
}
arrtoxml($team,$xmlf);

?>
以上代码可以输出一个XML,但是我想有一段的XML可以下面这样
<PreviewsMTA>
<PreviewMTA>A</PreviewMTA>
<PreviewMTA>B</PreviewMTA>
。。。。。
</PreviewsMTA>
可惜我只能生成
<PreviewMTA>A</PreviewMTA>
<PreviewMTA>B</PreviewMTA>
请问怎么解决?
麻烦高手帮我更改下代码,谢谢了
展开
 我来答
lxydjx
2013-07-24 · TA获得超过283个赞
知道小有建树答主
回答量:472
采纳率:0%
帮助的人:408万
展开全部
<?php
$team=array(
    'id' => '22955',
    'video_order_id' => '22955',
    'is_audio' => '0',
    'status_format' => '待审核',
    'ftp_path' => '2013/1374/5695/2479/137456952479.ssm/',
    'lists' => array(array('PreviewMTA'=>'A','PreviewMTB'=>'B')),
    'lists1' => array(array('PreviewMTA'=>'B'))
 ); 

echo saveXML($team);
function saveXML($arr,$root = 'response'){
    if(!preg_match('/[a-zA-Z][a-zA-Z0-9_]/',$root)){
        $root = 'response';
    }
     $xml = new DOMDocument('1.0','UTF-8');
     $xml->formatOutput = true;
     $response = $xml->createElement($root);
     $xml->appendChild($response);
     foreach($arr as $key=>$value){
         if(is_array($value)){
             $first = $xml->createElement($key);
             _createElement($value,$first,$xml);
         }else{
             $first = $xml->createElement($key,$value);
         }
         $response->appendChild($first);
     }
     return $xml->saveXML();
     //$xml->save('create_xml.xml');
 }
function _createElement($arr,$parentDom,&$xml){
    foreach($arr as $value){
        $list = $xml->createElement('list');
        foreach($value as $k=>$val){
            if(is_array($val)){
                $dom = $xml->createElement($k);
                _createElement($val,$dom, $xml);
            }else{
                $dom = $xml->createElement($k,$val);
            }
            $list->appendChild($dom);
        }
        $parentDom->appendChild($list);
    }
}
?>

可能和你要的结果有偏离

追问

大神,差一点就达到效果了。如果能吧<list>.....</list>这 list标记去掉就行了,这属于画蛇添足,因为lists和lists1已经达到我的效果,麻烦帮忙优化下达到我要的效果 小弟在追加50分。

追答
function arrtoxml($arr,$dom=0,$item=0){
    if (!$dom){
        $dom = new DOMDocument("1.0");
    }
    if(!$item){
        $item = $dom->createElement("root"); 
        $dom->appendChild($item);
    }
    foreach ($arr as $key=>$val){
        $itemx = $dom->createElement(is_string($key)?$key:"item");
        $item->appendChild($itemx);
        if (!is_array($val)){
            $text = $dom->createTextNode($val);
            $itemx->appendChild($text);
            
        }else {
            arrtoxml($val,$dom,$itemx);
        }
    }
    return $dom->saveXML();
}

网上找的,这个应该是你要的效果

金指重构
2013-07-24 · TA获得超过961个赞
知道小有建树答主
回答量:582
采纳率:0%
帮助的人:319万
展开全部

代码有点长,没仔细看。初步发现这句调用有问题:

else {
  arrtoxml($val,$dom,$itemx);
}

应该是:

else {
  arrtoxml($val,$file,$dom,$itemx);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式