Java + DOM: Jak ustawić podstawową przestrzeń nazw (już utworzonego) dokumentu?

Mam do czynienia zjuż stworzone Obiekt dokumentu. Muszę być w stanie ustawić jego podstawową przestrzeń nazw (nazwa atrybutu „xmlns”) na określoną wartość. Moje dane to DOM i są podobne do:

<root>...some content...</root>

Potrzebuję DOM, który jest podobny do:

<root xmlns="myNamespace">...some content...</root>

to jest to! Łatwo, prawda?Źle! Nie z DOM!

Próbowałem:1) Przy użyciu doc.getDocumentElement (). SetAttribute ("xmlns", "myNamespace")

Dostaję dokument z pustymi xmlns (działa nakażdy inna nazwa atrybutu!)

<root xmlns="">...</root>
2) Używanie renameNode (...)

Pierwszyklon dokument:

Document input = /*that external Document whose namespace I want to alter*/;

DocumentBuilderFactory BUILDER_FACTORY_NS = DocumentBuilderFactory.newInstance();
BUILDER_FACTORY_NS.setNamespaceAware(true);
Document output = BUILDER_NS.newDocument();
output.appendChild(output.importNode(input.getDocumentElement(), true));

Naprawdę brakuje mi document.clone (), ale może to tylko ja.

Terazzmień nazwę węzła głównego:

output.renameNode(output.getDocumentElement(),"myNamespace",
    output.getDocumentElement().getTagName());

Teraz nie maże bezpośredni? ;)

Teraz dostaję:

<root xmlns="myNamespace">
    <someElement xmlns=""/>
    <someOtherElement xmlns=""/>
</root>

Więc(jak wszyscy oczekiwaliśmy, prawda?), to zmienia nazwę przestrzeni nazwtylko z węzła głównego.

Przeklinaj cię, DOM!

Czy jest jakiś sposób, aby to zrobić rekurencyjnie (bez pisania własnej metody rekurencyjnej)?

Proszę pomóż ;)

Proszę nie radzić mi, aby zrobić jakieś wymyślne obejście, takie jak przekształcenie DOM w coś innego, zmienić tam przestrzeń nazw i przekształcić go z powrotem. Potrzebuję DOM, ponieważ jest to najszybszy standardowy sposób manipulowania XML.

Uwaga: Używam najnowszego JDK.

EDYTOWAĆ
Usunięto błędne założenia z pytania, które dotyczyło przestrzeni nazwprefiks.

questionAnswers(8)

yourAnswerToTheQuestion