Возможный дубликат:
Как вы переименовываете тег в SimpleXML через объект DOM?
Если у меня есть XML-документ, например:
<document> <dogs> <bulldog>Blu</bulldog> <terrier>Benjie</terrier> </dogs> <cats> <tiger>Tiggger</tiger> <lion>Cowardly</lion> </cats> </document>
И я хочу перепечатать его, добавив некоторые атрибуты, но не сохранить оригинал ….
<document> <canine type="fiction"> <bulldog>Blu</bulldog> <terrier>Benjie</terrier> </canine> <feline type="fiction"> <tiger>Tiggger</tiger> <lion>Cowardly</lion> </feline> </document>
Какую стратегию я бы использовал, чтобы сделать это в SimpleXML?
Я думаю, вам нужно будет сделать глубокую копию данных, удалить элемент <dogs>
, создать новый элемент <canine>
, а затем добавить глубокую копию с более ранней версии.
Изменить: пока вы можете создавать клоны с помощью $copy = clone $sxml->dogs;
а затем unset($sxml->dogs);
, фактическое рекурсивное добавление – это боль, и вам может понадобиться кодировать собственные рекурсивные вещи. В комментариях PHP.net есть несколько примеров.
Если ситуация становится более сложной, вам также может потребоваться рассмотреть DOM. (Вы можете взять SimpleXML и конвертировать в DOM и из DOM, если это необходимо.)