77393


親の要素名`old`を`new`に変更したいです。  
`old`の子要素は何階層も複数あるものとします。

[code]

    <old><span>test1</span><span>test2<span>test3</span></span></old>
    
[/code]

↓

[code]

    <new><span>test1</span><span>test2<span>test3</span></span></new>
    
[/code]

調べたところ単純に置き換えはできないようなので、  
`new`を作成し、`old`の中身をコピーする方法を探しています。  
下記の方法では`old`ごと入ってしまうので中身だけ全てコピーする方法はないでしょうか？

[code]

    $orgdoc = new DOMDocument;
    $orgdoc->loadXML("<old><span>test1</span><span>test2<span>test3</span></span></old>");
    $node = $orgdoc->getElementsByTagName("old")->item(0);
    
    $newdoc = new DOMDocument;
    $newdoc->loadXML("<new></new>");
    
    $node = $newdoc->importNode($node, true);
    $newdoc->documentElement->appendChild($node);
    
    echo $newdoc->saveHTML();
    
[/code]

↓

[code]

    <new><old><span>test1</span><span>test2<span>test3</span></span></old></new>
    
[/code]


CC BY-SA 4.0
2021-06-07T17:34:48.070
77390
2021-06-07T20:30:28.200
46729
question
php html dom
PHP DOMDocument 要素の変更


子ノードをコピーします。具体的には、

[code]

    $node = $newdoc->importNode($node, true);
    $newdoc->documentElement->appendChild($node);
    
[/code]

を以下の様に変更します。

[code]

    foreach($node->childNodes as $el){
      $el = $newdoc->importNode($el, true);
      $newdoc->documentElement->appendChild($el);
    }
    
[/code]


CC BY-SA 4.0
2021-06-07T20:30:28.200
77393
2021-06-07T20:30:28.200
77390
answer