Второй атрибут в createElementNS()
является квалифицированным именем (QName). Поэтому, если вы не укажете префикс для имени элемента, ваш элемент будет иметь префикс, а пространство имен будет добавлено в качестве пространства имен по умолчанию.
Вместо (= то, что вы написали)
Element two = document.createElementNS("http://ns1", "two");
явно указать желаемый префикс для элемента «два»
Element two = document.createElementNS("http://ns1", "ns1:two");
или извлеките префикс из родительского элемента вместо его жесткого кодирования
Element two = document.createElementNS("http://ns1", one.getPrefix() + ":" + "two");
Обратите внимание, что Node.getPrefix()
вернет null
, если префикс не указан. Конечно, хранение префикса в строковой переменной облегчает задачу.
PS. Эти примеры кода не проверены, поэтому правильный результат не гарантирован, но, как мне кажется, он должен работать.