2013-02-12 41 views
0

这个XML文件是我到目前为止有:创建使用simplexml_load_string,的addChild和的addAttribute

这是我收到的输出:http://i.imgur.com/mGRAJPe.gif

似乎所有的子节点都成为一个孩子第一个datafield元素,而不是嵌套在它们各自的数据字段父项中。有什么建议么?

$str = '<?xml version="1.0" encoding="UTF-8"?><collection  xmlns="http://www.loc.gov/MARC21/slim"><record></record></collection>'; 
$xml = simplexml_load_string($str); 
$xml->record = ""; 
$xml->record->addChild('leader', $data["controlfield"]["000"]["40"]); 

foreach ($data["controlfield"] as $dcf => $value) { 
    foreach ($value as $dcfv) { 
    $addControl = $xml->record->addChild('controlfield', $dcfv); 
    $addControl->addAttribute('tag', $dcf); 
    } 
} 

foreach ($data["datafield"] as $dftc => $dfarray) { 
    $addData = $xml->record->addChild('datafield'); 
    $addData->addAttribute('tag', $dftc); 
    $addData->addAttribute('ind1', $dfarray['ind1']); 
    $addData->addAttribute('ind2', $dfarray['ind2']); 

    foreach ($dfarray as $code => $value) {       
     if(($code != "ind1") && ($code != "ind2")) { 
     $addSubs = $xml->record->datafield->addChild('subfield', $value); 
     $addSubs->addAttribute('code', $code); 
     } 
    } 
} 

回答

1

嗯,这就是你做什么在这里,你处理datafield作为一个单一的节点,所以第一个是使用(它为什么应该是最后一个?):

$xml->record->datafield->addChild('subfield', $value); 

但是你已经有你想要的父母在$addData,只需使用它:

$addData->addChild('subfield', $value); 
+0

非常感谢,这完美的工作! – rtd1123 2013-02-12 16:55:41