2011-04-11 17 views
22
StringWriter writer = new StringWriter(); 
XmlSerializer serializer = new KXmlSerializer(); 
serializer.setOutput(writer); 
serializer.startDocument(null, null); 
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); 
// Creating XML 

serializer.endDocument(); 
String xmlString = writer.toString(); 

在上述環境中刪除XML頭,是否有標準的API提供給刪除XML頭<?xml version='1.0' ?>或你建議通過字符串操作去:從XML在Java中

if (s.startsWith("<?xml ")) { 
    s = s.substring(s.indexOf("?>") + 2); 
} 

希望xmlString的輸出沒有XML標題信息<?xml version='1.0' ?>

回答

14

如果使用JAXP序列化程序,則可以訪問XSLT中定義的所有輸出屬性,例如omit-xml-declaration="yes"。您可以使用「身份變換器」的形式獲得此名稱,使用transformerFactory.getTransformer()(不帶參數),然後您可以撥打setOutputProperty()

71

理想情況下,您可以根據需要進行API調用以排除XML標頭。看起來KXmlSerializer不支持這個(瀏覽代碼here)。如果你有一個org.w3c.dom.Document(或實際上任何其他實施javax.xml.transform.Source),你可以完成你想要的是這樣的:

TransformerFactory tf = TransformerFactory.newInstance(); 
Transformer transformer = tf.newTransformer(); 
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); 
StringWriter writer = new StringWriter(); 
transformer.transform(new DOMSource(doc), new StreamResult(writer)); 

否則,如果你必須使用KXmlSerializer它看起來像你必須管理輸出。

0

不要調用:

serializer.startDocument(); 

它增加了XML頭,但你需要調用:

serializer.endDocument(); 

否則你將XML作爲一個空字符串創建的。

+0

謝謝!這對我有效。 – user328414 2017-06-07 00:27:27