2012-06-08 15 views
15

Estoy empezando a usar el marco XML simple con anotaciones (link) para Java, pero no entiendo, cómo preludir la etiqueta de declaración XML <?xml version="1.0" encoding="UTF-8" ?> en el archivo XML. Entonces mi pregunta es: ¿cómo obtengo la declaración XML como primera etiqueta?Etiqueta de declaración XML usando SimpleXML

package simplexml; 

import org.simpleframework.xml.Attribute; 
import org.simpleframework.xml.Element; 
import org.simpleframework.xml.Root; 

@Root 
public class Example { 

    @Element 
    private String text; 

    @Attribute 
    private int index; 

    public Example(String text, int index) { 
     this.text = text; 
     this.index = index; 
    } 

    public String getMessage() { 
     return text; 
    } 

    public int getId() { 
     return index; 
    } 
} 

prueba:

public static void main(String[] args) { 
     Serializer serializer = new Persister(); 
     Example example = new Example("Example message", 123); 
     File result = new File("example.xml"); 

     try { 
      serializer.write(example, result); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Produce:

<example index="123"> 
    <text>Example message</text> 
</example> 

Lo que me gustaría tener:

<?xml version="1.0" encoding="UTF-8" ?> 
<example index="123"> 
    <text>Example message</text> 
</example> 

Gracias! Además, ¿dónde podría ver esas cosas?

+0

Esa versión y codificación son (más o menos) los valores predeterminados. ¿Por qué quieres ser explícito? – Quentin

+0

Es cierto, pero: "La declaración XML es una instrucción de procesamiento que identifica el documento como XML. Todos los documentos XML deben comenzar con una declaración XML". [link] (http://xmlwriter.net/xml_guide/xml_declaration.shtml) –

+0

No creo que sea una buena fuente ... pero [la especificación está de acuerdo] (http://www.w3.org/TR/ xml/# sec-prolog-dtd) – Quentin

Respuesta

16

Uso Spring para Android para enviar solicitudes XML, y estaba enfrentando el mismo problema. Aquí está el código para que funcione en base a la solución de @ implicit_knowledge en caso de que alguien lo necesite.

RestTemplate restTemplate = new RestTemplate();    
restTemplate.getMessageConverters().add(new StringHttpMessageConverter());    
Serializer serializer = new Persister(new Format("<?xml version=\"1.0\" encoding= \"UTF-8\" ?>")); 
restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter(serializer)); 
restTemplate.postForObject(URL, udata, String.class); 
Cuestiones relacionadas