我想使用 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)