Одновременное изменение происходит, потому что вы продолжаете добавлять несколько ссылок на один и тот же узел (вместо новых узлов).
Подумайте об этом так (псевдокод!):
<node1>value</node1>
<node2>
<reference>Go, look at node1!</reference>
<reference>Go, look at node1!</reference>
<reference>Go, look at node1!</reference>
</node2>
Каждый раз, когда встречается ссылка, возвращается значение, сохраненное в node1. При изменении этого исходного значения, поскольку все ссылки указывают на один и тот же узел, они также будут возвращать одно и то же новое значение.
Чтобы добавить новые копии ваших узлов вместо оригинала, используйте
mainConfig.appendChild(configSet1.viewconfig.copy());
но имейте в виду, что copy () возвращает копию всего поддерева узла, а не только самого узла.
Что касается того, почему порядок элементов неправильный, я действительно в растерянности - XML # appendChild () должен добавить элементы в конец списка дочерних узлов. Трассировка (mainConfig.toXMLString());
возвращает тот же результат?