Java/XML/dom4j
Change namespace
import java.util.ListIterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.QName;
import org.dom4j.Visitor;
import org.dom4j.VisitorSupport;
import org.dom4j.io.SAXReader;
public class VisitorExample {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read("test.xml");
Namespace oldNs = Namespace.get("oldNamespace");
Namespace newNs = Namespace.get("newPrefix", "newNamespace");
Visitor visitor = new NamesapceChangingVisitor(oldNs, newNs);
doc.accept(visitor);
System.out.println(doc.asXML());
}
}
class NamesapceChangingVisitor extends VisitorSupport {
private Namespace from;
private Namespace to;
public NamesapceChangingVisitor(Namespace from, Namespace to) {
this.from = from;
this.to = to;
}
public void visit(Element node) {
Namespace ns = node.getNamespace();
if (ns.getURI().equals(from.getURI())) {
QName newQName = new QName(node.getName(), to);
node.setQName(newQName);
}
ListIterator namespaces = node.additionalNamespaces().listIterator();
while (namespaces.hasNext()) {
Namespace additionalNamespace = (Namespace) namespaces.next();
if (additionalNamespace.getURI().equals(from.getURI())) {
namespaces.remove();
}
}
}
}