funzione che aggiunge un nodo a un albero XML

così funziona e lo mette alla fine dell'albero
$primo_nodo -> append_child($nodo_voce);

ma se provo a inserirlo in una determinata posizione avendo prima individuato il nodo/posizione mi crea un nuovo albero privo dei due nodi in questione!!! (quello nuovo e quello passato per la posizione)
$primo_nodo -> insert_before($dove,$nodo_voce);

su www.php.net indicano questo esempio
newnode = $element->insert_before($element, $element);
anche se non capisco perché indicano come nodo a cui attaccarlo ancora $element , ho provato a faare così ma il risultato non cambia
$nodo_voce -> insert_before($dove,$nodo_voce);

nota divertente dal www.php.net dal manuale di insert_before
This function inserts the new node newnode right before the node refnode
tradotto
Questa funzione inserisce il nuovo_nodo a destra rispetto al nodo_riferimento.