Создание XML-файла с использованием simplexml_load_string, addChild и addAttribute

Это то, что я до сих пор:

Это вывод, который я получаю: http://i.imgur.com/mGRAJPe.gif

Кажется, что все узлы подполей становятся дочерними по отношению к первому элементу поля данных, а не вкладываются в их соответствующих родительских полей данных. Какие-либо предложения?

$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);
Другие вопросы по тегам