我想使用XML DOM为XML String中的所有元素添加名称空间前缀。 例如。 我的字符串以这种方式出现:
<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中实现最佳效果?
答案 0 :(得分: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);
}
}