String xml = ...
SAXReader reader = new SAXReader();
Document document = reader.read(new ByteArrayInputStream(xml.getBytes()));
document.accept(new NameSpaceCleaner());
return document.asXML();
where the NameSpaceCleaner is a dom4j visitor :
private static final class NameSpaceCleaner extends VisitorSupport {
public void visit(Document document) {
((DefaultElement) document.getRootElement())
.setNamespace(Namespace.NO_NAMESPACE);
document.getRootElement().additionalNamespaces().clear();
}
public void visit(Namespace namespace) {
namespace.detach();
}
public void visit(Attribute node) {
if (node.toString().contains("xmlns")
|| node.toString().contains("xsi:")) {
node.detach();
}
}
public void visit(Element node) {
if (node instanceof DefaultElement) {
((DefaultElement) node).setNamespace(Namespace.NO_NAMESPACE);
}
}
}
第二种办法:
public static void removeAllNamespaces(Document doc) {
Element root = doc.getRootElement();
if (root.getNamespace() !=
Namespace.NO_NAMESPACE) {
removeNamespaces(root.content());
}
}
public static void unfixNamespaces(Document doc, Namespace original) {
Element root = doc.getRootElement();
if (original != null) {
setNamespaces(root.content(), original);
}
}
public static void setNamespace(Element elem, Namespace ns) {
elem.setQName(QName.get(elem.getName(), ns,
elem.getQualifiedName()));
}
/**
*Recursively removes the namespace of the element and all its
children: sets to Namespace.NO_NAMESPACE
*/
public static void removeNamespaces(Element elem) {
setNamespaces(elem, Namespace.NO_NAMESPACE);
}
/**
*Recursively removes the namespace of the list and all its
children: sets to Namespace.NO_NAMESPACE
*/
public static void removeNamespaces(List l) {
setNamespaces(l, Namespace.NO_NAMESPACE);
}
/**
*Recursively sets the namespace of the element and all its children.
*/
public static void setNamespaces(Element elem, Namespace ns) {
setNamespace(elem, ns);
setNamespaces(elem.content(), ns);
}
/**
*Recursively sets the namespace of the List and all children if the
current namespace is match
*/
public static void setNamespaces(List l, Namespace ns) {
Node n = null;
for (int i = 0; i < l.size(); i++) {
n = (Node) l.get(i);
if (n.getNodeType() == Node.ATTRIBUTE_NODE) {
((Attribute) n).setNamespace(ns);
}
if (n.getNodeType() == Node.ELEMENT_NODE) {
setNamespaces((Element) n, ns);
}
}
}