如何从dom文档中删除所有命名空间

时间:2014-08-08 11:12:01

标签: java

我正在从XML文件创建一个Dom(org.w3c.dom.Document)文档。 我想从该文档中删除所有命名空间以调用其他一些服务。 该服务期望XML没有名称空间。

2 个答案:

答案 0 :(得分:7)

public Document cleanNameSpace(Document doc) {

    NodeList list = doc.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        removeNamSpace(list.item(i), "");
    }

    return doc;
}
private void removeNamSpace(Node node, String nameSpaceURI) {

    if (node.getNodeType() == Node.ELEMENT_NODE) {
        Document ownerDoc = node.getOwnerDocument();
        NamedNodeMap map = node.getAttributes();
        Node n;
        for (!(0==map.getLength())) {
            n = map.item(0);
            map.removeNamedItemNS(n.getNamespaceURI(), n.getLocalName());
        }
        ownerDoc.renameNode(node, nameSpaceURI, node.getLocalName());
    }
    NodeList list = node.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        removeNamSpace(list.item(i), nameSpaceURI);
    }
}

答案 1 :(得分:0)

如果只是map.removeNamedItemNS,则可以删除真正需要的命名空间属性。在这种情况下,最好删除为n.getNamespaceURI()!= null &&“ xmlns” .equals(n.getPrefix())的NamedItemNS, 但是owner.Doc.renameNode(n,null,n.getLocalName())对于其他n.getNamespaceURI()!= null的对象也是如此-这将从名称空间中删除属性,自动删除前缀并将其保留在文档中。

相关问题