How can I, given a w3c DOM (Java\'s default implementation, specifically) change the namespace of every element/attribute/node in that DOM? Efficiently, preferably. The DO
If you are ok with using the Xerces classes, you can create a DOMParser that replaces the URI of attributes and elements with your fixed up URIs:
import org.apache.xerces.parsers.DOMParser;
public static class MyDOMParser extends DOMParser {
private Map fixupMap = ...;
@Override
protected Attr createAttrNode(QName attrQName)
{
if (fixupMap.containsKey(attrQName.uri))
attrQName.uri = fixupMap.get(attrQName.uri);
return super.createAttrNode(attrQName);
}
@Override
protected Element createElementNode(QName qName)
{
if (fixupMap.containsKey(qName.uri))
qName.uri = fixupMap.get(qName.uri);
return super.createElementNode(qName);
}
}
The elsewhere, you can parse into a DOM Document:
DOMParse p = new MyDOMParser(...);
p.parse(new InputSource(inputStream));
Document doc = p.getDocument();