DOMDocument::importNode

(PHP 5, PHP 7, PHP 8)

DOMDocument::importNodeImporta um nó para o documento atual

Descrição

public DOMDocument::importNode(DOMNode $node, bool $deep = false): DOMNode|false

Esta função retorna uma cópia do nó a ser importado e o associa com o documento atual.

Parâmetros

node

O nó a ser importado.

deep

Se definido como true, este método importará recursivamente a subárvore sob o node.

Nota:

Para copiar os atributos dos nós, deep precisa ser definido como true.

Valor Retornado

O nó copiado ou false, se não puder ser copiado.

Erros/Exceções

DOMException é lançado se o nó não puder ser importado.

Exemplos

Exemplo #1 Exemplo de DOMDocument::importNode()

Copiando nós entre documentos.

<?php

$orgdoc
= new DOMDocument;
$orgdoc->loadXML("<raiz><elemento><filho>texto no filho</filho></elemento></raiz>");

// O nó que queremos importar para um novo documento
$node = $orgdoc->getElementsByTagName("elemento")->item(0);


// Crie um novo documento
$newdoc = new DOMDocument;
$newdoc->formatOutput = true;

// Adicione alguma marcação
$newdoc->loadXML("<raiz><algumelemento>texto em algum elemento</algumelemento></raiz>");

echo
"O 'novo documento' antes de copiar nós nele:\n";
echo
$newdoc->saveXML();

// Importe o nó, e todos os seus filhos, para o documento
$node = $newdoc->importNode($node, true);
// E então acrescente-o ao nó "<raiz>"
$newdoc->documentElement->appendChild($node);

echo
"\nO 'novo documento' após copiar nós nele:\n";
echo
$newdoc->saveXML();
?>

O exemplo acima produzirá:

O 'novo documento' antes de copiar nós nele:
<?xml version="1.0"?>
<raiz>
  <algumelemento>texto em algum elemento</algumelemento>
</raiz>

O 'novo documento' após copiar nós nele:
<?xml version="1.0"?>
<raiz>
  <algumelemento>texto em algum elemento</algumelemento>
  <elemento>
    <filho>texto no filho</filho>
  </elemento>
</raiz>

adicionar nota

Notas de Usuários 2 notes

up
4
c dot 1 at smithies dot org
16 years ago
Assume that $source and $dest are instances of DOMDocument. Assume that $sourcedoc contains an element with ID 'sourceID' and that $destdoc contains an element with ID 'destID'. Assume that we have already set up source and destination element variables thus:

<?php
 $src = $sourcedoc->getElementById('sourceID');
 $dst = $destdoc->getElementById('destID');
?>

Finally, assume that $sel has more than one child node.

In order to import the child elements of $src as children of $dst, you might do something like this:

<?php
$src = $dest->importNode($src, TRUE);

foreach ($src->childNodes as $el) $dst->appendChild($el);
?>

But this does not work. foreach gets confused, because (as noted below) appending an imported element to another existing element in the same document causes it to be removed from its current parent element.

Therefore, the following technique should be used:

<?php
foreach ($src->childNodes as $el) $dst->appendChild($destdoc->importNode($el, TRUE));
?>
up
3
Fitopaldi
20 years ago
importNode returns a copy of the node to import and associates it with the current document, but not import the node to the current DOMDocument. Use appendChild for import the copy of the node to current DOMDocument.

<?
 $domNode = $dom->importNode($aDomNode, true);
 $currentDomDocument->appendChild($domNode);
?>
To Top