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.