Как создать дубликат элемента 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?


person dbootsnatcher    schedule 03.08.2011    source источник


Ответы (1)


Я думаю, вам нужно будет сделать глубокую копию данных, стереть элемент <dogs>, создать новый элемент <canine>, а затем добавить глубокую копию ранее.

Редактировать. Хотя вы можете создавать клоны с помощью $copy = clone $sxml->dogs;, а затем выполнять unset($sxml->dogs);, фактическое рекурсивное добавление — это боль, и вам может потребоваться кодировать свои собственные рекурсивные вещи. В комментариях PHP.net есть несколько примеров.

Если все становится более сложным, вы также можете вместо этого рассмотреть DOM. (Вы можете взять SimpleXML и преобразовать в и из DOM, если необходимо.)

person Darien    schedule 03.08.2011