如何在PHP中将XML附加在一起

时间:2011-08-30 16:00:15

标签: php zend-framework

不知道如何正确处理以下内容......

$attendXml = "";
for ($i=0;$i<count($attendData);$i++) {
    $attendXml += assocArrayToXML('row',$attendData[$i]);
}

我写错了,但我认为你看到我想要做的事,代码来自以下程序。检索organXml工作正常,问题发生在一个包含许多(关联数组)的数组(无关联),这就是问题所在。

如何将每个关联数组的XML合并为一个由'row'区分的XML。

function assocArrayToXML($root_element_name,$ar)
{
    $xml = new SimpleXMLElement("<?xml version=\"1.0\"?><{$root_element_name}>        </{$root_element_name}>");
    $f = create_function('$f,$c,$a','
            foreach($a as $k=>$v) {
            if(is_array($v)) {
                $ch=$c->addChild($k);
                $f($f,$ch,$v);
            } else {
                $c->addChild($k,$v);
            }
        }');
$f($f,$xml,$ar);
return $xml->asXML();
} 

// Include Libraries
include('services\OrganisationService.php'); 
include('services\AttendeeService.php');

// Target Organisation
$organ_id = 1;

// Read Organisation Data 
$organServ = new OrganisationService();
$organData = $organServ->getOrganisationByID($organ_id);
$organXml = assocArrayToXML('organisation',$organData);

// Read Attendees Data (For Organisation)
$attendServ = new AttendeeService();
$attendData = $attendServ->getAllActiveAttendeeByOrg($organ_id);

$attendXml = "";
for ($i=0;$i<count($attendData);$i++) {
    $attendXml += assocArrayToXML('row',$attendData[$i]);
}

//var_dump($attendData);
header ("Content-Type:text/xml");
echo $attendXml;
?>

1 个答案:

答案 0 :(得分:0)

您需要根据创建整个xml文档字符串的关联数组,在树中创建节点。我还建议不要使用create_function来定义递归函数,而是考虑创建一个用于处理XML呈现的类。