Обновить атрибут узла XML

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

$dom = new DOMDocument;
$dom->loadXML($appCom_file_name);
$frames = $dom->getElementsByTagName('frame');
foreach ($frames as $frame) {
if ($frame->getAttribute('imageId') == '') {
$frame->setAttribute('imageId', $id);
}
}

$dom->saveXML();

Источник XML:

<template>
<appCom>
<page>
<defaultValues>
<frame id="frame_01_0" deltaRotation="0" deltaScale="100" deltaX="0" deltaY="0" imageId="" />
<frame id="frame_02_0" deltaRotation="0" deltaScale="100" deltaX="0" deltaY="0" imageId="" />
<frame id="frame_03_0" deltaRotation="0" deltaScale="100" deltaX="0" deltaY="0" imageId="" />
</defaultValues>
</page>
<page>
<defaultValues>
<frame id="frame_01_1" deltaRotation="0" deltaScale="100" deltaX="0" deltaY="0" imageId="" />
<frame id="frame_02_1" deltaRotation="0" deltaScale="100" deltaX="0" deltaY="0" imageId="" />
<frame id="frame_03_1" deltaRotation="0" deltaScale="100" deltaX="0" deltaY="0" imageId="" />
</defaultValues>
</page>
</appCom>
</template>

1

Решение

Я проверил ваш код и, очевидно, получаю сообщение об ошибке $id не определено. Вы пытались изменить эту строку:

$frame->setAttribute('imageId', $id);

к этому:

$frame->setAttribute('imageId', $frame->getAttribute('id'));

?

И, конечно же, чтобы распечатать результаты на экране вы бы использовали echo:

echo $dom->saveXML();
1

Другие решения

Спасибо за все отзывы!

Он не должен ничего выводить, кроме как снова сохранить файл. Идентификатор был определен, но я забыл включить его в свой вопрос. Это работает сейчас:

$id = 1;

$dom = new DOMDocument;
$dom->loadXML(file_get_contents($appCom_file_name));
$frames = $dom->getElementsByTagName('frame');
foreach ($frames as $frame) {
if ($frame->getAttribute('imageId') == '') {
$frame->setAttribute('imageId', $id);
}
}

$dom->save($appCom_file_name);
1

Я думаю, что вы должны использовать saveXML с параметром … вот мой код для вдохновения:

$dom = new DOMDocument();
$dom->loadXML($datas);

$svg = $dom->getElementsByTagName('svg');
$resize = $this->resize(452, 480, $res);
$svg->item(0)->setAttribute('width', $resize['w']);
$svg->item(0)->setAttribute('height', $resize['h']);
$datas = '<?xml version="1.0" encoding="UTF-8" tandalone="no"?>'.$dom->saveXML($svg->item(0));
-1
По вопросам рекламы [email protected]