How can I change the namespace on every node in a DOM?

前端 未结 8 722
小蘑菇
小蘑菇 2020-12-19 10:05

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

8条回答
  •  北荒
    北荒 (楼主)
    2020-12-19 10:33

    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();
    

提交回复
热议问题