如何创建XML元素的副本,但更改元素的名称并删除原始元素?

时间:2011-08-03 04:37:53

标签: php xml simplexml xml-parsing

  

可能重复:
  How do you rename a tag in SimpleXML through a DOM object?

如果我有这样的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中使用什么策略?

1 个答案:

答案 0 :(得分:2)

我认为您需要制作数据的深层副本,删除<dogs>元素,创建新的<canine>元素,然后附加较早的深层副本。

修改可以使用$copy = clone $sxml->dogs;制作克隆,然后执行unset($sxml->dogs);,但实际的递归添加很痛苦,您可以需要编写自己的递归内容。 PHP.net评论中有一些例子。

如果事情变得更复杂,您可能还想考虑DOM。 (如果需要,您可以使用SimpleXML并转换tofrom DOM。)