2011-04-11 53 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(); 

En el entorno más arriba, si hay alguna de API estándar disponible para quitar el encabezado XML <?xml version='1.0' ?> o qué sugieres que ir a través de la manipulación de cadenas:eliminar la cabecera XML desde un archivo XML en Java

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

Se buscó la salida en el xmlString sin información de encabezado XML <?xml version='1.0' ?>.

Respuesta

14

Si utiliza un serializador JAXP, obtendrá acceso a todas las propiedades de salida definidas en XSLT, por ejemplo omit-xml-declaration="yes". Puede obtenerlo en forma de un "transformador de identidad", llamado usando transformerFactory.getTransformer() sin parámetros, en el que luego llama al setOutputProperty().

71

Idealmente, puede realizar una llamada a la API para excluir el encabezado XML si lo desea. No parece que KXmlSerializer sea compatible con esto (pasando por el código here). Si usted tuvo un org.w3c.dom.Document (o en realidad cualquier otra aplicación de javax.xml.transform.Source) que podría lograr lo que quiere de esta manera:

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

De lo contrario, si usted tiene que utilizar KXmlSerializer parece que vas a tener que manipular la salida.

0

No haga llamada a:

serializer.startDocument(); 

Se añade la cabecera XML, aunque es necesario llamar a:

serializer.endDocument(); 

de lo contrario el XML se creará como una cadena en blanco.

+0

¡Gracias! esto funcionó para mí. – user328414

Cuestiones relacionadas