В этом нет ничего плохого.DOMNodeList может содержать любые экземпляры DOMNode или их подклассы.DOMElement расширяет DOMNode, поэтому технически DOMElement также является DOMNode.То же самое для DOMAttr.
РЕДАКТИРОВАТЬ: Проблема в том, что вы пытаетесь скопировать в другой DOMDocument.Вы должны importNode
узел в документе в первую очередь, прежде чем добавить его.
EDIT2: Попробуйте, пожалуйста:
$r = $def->getElementsByTagName( 'repository' )->item( 0 );
$s = $rdef->getElementsByTagName( 'repository' )->item( 0 );
$i = $def->importNode( $s, TRUE );
$r->appendChild( $i , TRUE );
EDIT3: Полный пример
$srcXML = <<< XML
<repositories>
<repository>
<element>foo</element>
</repository>
</repositories>
XML;
$destXML = <<< XML
<repositories>
<repository>
<element>bar</element>
</repository>
</repositories>
XML;
$srcDoc = new DOMDocument;
$destDoc = new DOMDocument;
$destDoc->formatOutput = TRUE;
$destDoc->preserveWhiteSpace = FALSE;
$srcDoc->loadXML( $srcXML );
$destDoc->loadXML( $destXML );
$destNode = $destDoc->getElementsByTagName('repository')->item( 0 );
$srcNode = $srcDoc->getElementsByTagName('repository')->item( 0 );
$import = $destDoc->importNode($srcNode, TRUE);
$destNode->parentNode->appendChild($import);
echo $destDoc->saveXML();
т
<?xml version="1.0"?>
<repositories>
<repository>
<element>bar</element>
</repository>
<repository>
<element>foo</element>
</repository>
</repositories>