2012-06-08 14 views
15

Sto iniziando a utilizzare il framework XML semplice con annotazioni (link) per Java, ma non ottengo, come preludere il tag di dichiarazione XML <?xml version="1.0" encoding="UTF-8" ?> nel file XML. Quindi la mia domanda è: come ottengo la dichiarazione XML come primo tag?Tag di dichiarazione XML con 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; 
    } 
} 

prova:

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> 

Quello che mi piacerebbe avere:

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

Grazie! Inoltre, dove potrei apparire così?

+0

Quella versione e la codifica sono (più o meno) i valori predefiniti. Perché vuoi essere esplicito? – Quentin

+0

Vero, ma: "La dichiarazione XML è un'istruzione di elaborazione che identifica il documento come XML e tutti i documenti XML dovrebbero iniziare con una dichiarazione XML." [link] (http://xmlwriter.net/xml_guide/xml_declaration.shtml) –

+0

Non penso che sia una buona fonte ... ma [la specifica è d'accordo] (http://www.w3.org/TR/ xml/# sec-prolog-dtd) – Quentin

risposta

16

Io uso Spring per Android per inviare richieste XML e ho riscontrato lo stesso problema. Ecco il codice per farlo funzionare sulla base della soluzione di @ implicit_knowledge nel caso qualcuno ne abbia bisogno.

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