Как создать дубликат элемента XML, но изменить имя элемента и удалить оригинал?

Возможный дубликат:
Как вы переименовываете тег в 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, если это необходимо.)