有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用XML DOM添加名称空间前缀XML字符串

我想使用XMLDOM为XML字符串中的所有元素添加名称空间前缀。 例如。 我的字符串是这样来的:

<root> 
       <operation>test string</operation> 
       <data> 
              <parameter> 
                     <name>test string</name> 
                     <value>test string</value> 
                 </parameter> 
              <parameter> 
                     <name>test string</name> 
                     <value>test string</value> 
                 </parameter> 
              <parameter> 
                     <name>test string</name> 
                     <value>test string</value> 
                 </parameter> 
          </data> 
   </root>

我想要一个输出XML,如下所示:

<ns0:root xmlns:ns0 = "http://www.tibco.com/schemas/BWStatistics-hawk/Schema.xsd2"> 
       <ns0:operation>test string</ns0:operation> 
       <ns0:data> 
              <ns0:parameter> 
                     <ns0:name>test string</ns0:name> 
                     <ns0:value>test string</ns0:value> 
                 </ns0:parameter> 
              <ns0:parameter> 
                     <ns0:name>test string</ns0:ns0:name> 
                     <ns0:value>test string</ns0:value> 
                 </ns0:parameter> 
              <ns0:parameter> 
                     <ns0:name>test string</ns0:name> 
                     <ns0:value>test string</ns0:value> 
                 </ns0:parameter> 
          </ns0:data> 
   </ns0:root>

如何在Java中以最佳方式实现这一点


共 (1) 个答案

  1. # 1 楼答案

    我们可以用Transformer+SAX来实现。试试这个:

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