从Java中的XML中删除XML标头

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(); 

在上面的环境中,是否有任何标准API可用于删除XML标头或者您是否建议通过字符串操作:

 if (s.startsWith("") + 2); } 

想要xmlString的输出而没有XML头信息

如果使用JAXP序列化程序,则可以访问XSLT中定义的所有输出属性,例如omit-xml-declaration="yes" 。 您可以使用“身份变换器”的forms获得此信息,使用不带参数的transformerFactory.getTransformer()调用,然后调用setOutputProperty()

理想情况下,如果需要,您可以进行API调用以排除XML标头。 虽然KXmlSerializer似乎不支持这一点(在这里 KXmlSerializer过代码)。 如果您有一个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你似乎必须操纵输出。

不要拨打电话:

 serializer.startDocument(); 

它添加了XML标头,但您需要调用:

 serializer.endDocument(); 

否则您的XML将被创建为空字符串。