1

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でこれを最適に達成するにはどうすればよいですか?

4

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);
        }
    }
于 2012-11-21T21:58:29.967 に答える