Adding namespace prefix XML String using XML DOM

后端 未结 1 1902
感动是毒
感动是毒 2021-01-16 16:00

I want to add namespace prefix to all the elements in the XML String using XML DOM. E.g. My String is coming in this way:

 
       

        
相关标签:
1条回答
  • 2021-01-16 16:32

    We can do it with Transformer + SAX. Try this:

        import java.io.StringWriter;
    
        import javax.xml.transform.Transformer;
        import javax.xml.transform.TransformerFactory;
        import javax.xml.transform.sax.SAXSource;
        import javax.xml.transform.stream.StreamResult;
    
        import org.xml.sax.Attributes;
        import org.xml.sax.InputSource;
        import org.xml.sax.SAXException;
        import org.xml.sax.XMLReader;
        import org.xml.sax.helpers.XMLFilterImpl;
        import org.xml.sax.helpers.XMLReaderFactory;
    
        public class Test {
    
            public static void main(String args[]) throws Exception {
                XMLReader xmlReader = new XMLFilterImpl(XMLReaderFactory.createXMLReader()) {
                    String namespace = "http://www.tibco.com/schemas/BWStatistics-hawk/Schema.xsd2";
                    String pref = "ns0:";
    
                    @Override
                    public void startElement(String uri, String localName, String qName, Attributes atts)
                            throws SAXException {
                        super.startElement(namespace, localName, pref + qName, atts);
                    }
    
                    @Override
                    public void endElement(String uri, String localName, String qName) throws SAXException {
                        super.endElement(namespace, localName, pref + qName);
                    }
                };
                TransformerFactory tf = TransformerFactory.newInstance();
                Transformer t = tf.newTransformer();
                StringWriter s = new StringWriter();
                t.transform(new SAXSource(xmlReader, new InputSource("test.xml")), new StreamResult(s));
                System.out.println(s);
            }
        }
    
    0 讨论(0)
提交回复
热议问题