繁体   English   中英

使用XML DOM添加名称空间前缀XML String

[英]Adding namespace prefix XML String using XML DOM

我想使用XML DOM将名称空间前缀添加到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中达到最佳?

我们可以使用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);
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM