
DOMDocumentFragment::append 메소드는 기존 노드를 삭제하고 새로운 노드를 추가하는 동작을 합니다. 이 문제를 해결하기 위해 다음 방법을 사용할 수 있습니다.
1. 노드를 추가하기 전에 기존 노드를 복사합니다. 복사한 노드를 사용하여 append 메소드를 호출합니다. 이렇게 하면 기존 노드는 삭제되지 않습니다.
#hostingforum.kr
php
$doc = new DOMDocument();
$fragment = $doc->createDocumentFragment();
// 기존 노드 복사
$div = $doc->createElement('div');
$fragment->appendChild($div->cloneNode(true));
// 새로운 노드 추가
$fragment->appendChild($doc->createElement('p'));
echo $doc->saveHTML();
2. 노드를 추가하기 전에 append 메소드를 호출하기 전에 노드를 appendChild 메소드에 추가합니다. appendChild 메소드는 기존 노드를 삭제하지 않습니다.
#hostingforum.kr
php
$doc = new DOMDocument();
$fragment = $doc->createDocumentFragment();
// 새로운 노드 추가
$fragment->appendChild($doc->createElement('div'));
$fragment->appendChild($doc->createElement('p'));
echo $doc->saveHTML();
3. 노드를 추가하기 전에 노드를 append 메소드에 추가하기 전에 cloneNode 메소드를 호출하여 노드를 복사합니다. cloneNode 메소드는 기존 노드를 삭제하지 않습니다.
#hostingforum.kr
php
$doc = new DOMDocument();
$fragment = $doc->createDocumentFragment();
// 새로운 노드 추가
$fragment->append($doc->createElement('div')->cloneNode(true));
$fragment->append($doc->createElement('p')->cloneNode(true));
echo $doc->saveHTML();
이러한 방법 중 하나를 사용하여 노드를 추가하면 기존 노드가 삭제되지 않습니다.
2025-03-30 22:09