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

Java 如何从dom文档中删除所有名称空间,java,Java,我正在从一个XML文件创建一个Dom(org.w3c.Dom.Document)文档。 我想从该文档中删除所有名称空间以调用其他服务。 该服务需要一个没有名称空间的XML。公共文档名称空间(Document doc){ public Document cleanNameSpace(Document doc) { NodeList list = doc.getChildNodes(); for (int i = 0; i < list.getLength(); i++) {

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

公共文档名称空间(Document doc){
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;
        while (!(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);
    }
}
NodeList list=doc.getChildNodes(); 对于(int i=0;i
如果只映射.removenamedItems,则可以删除真正需要的命名空间属性。在这种情况下,最好删除n.getNamespaceURI()中的NamedItems=null&&“xmlns”.equals(n.getPrefix()),
但是对于其他使用n.getNamespaceURI()的用户,则使用ownerDoc.renameNode(n,null,n.getLocalName())=也为null-这将从名称空间中删除属性,自动删除前缀并在文档中保留属性。

不看示例:是否遇到任何特定问题?您也可以尝试使用XSL转换,请检查此问题:我尝试使用xslt,但似乎性能有问题