2012-06-08 41 views
15

我開始對Java使用帶有註釋的簡單XML框架(link),但是我不知道如何在XML文件中引用XML聲明標記<?xml version="1.0" encoding="UTF-8" ?>。所以我的問題是:如何獲得XML聲明作爲第一個標記?使用SimpleXML的XML聲明標記

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

測試:

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

產地:

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

我想什麼有:

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

謝謝!另外,我在哪裏可以看到這樣的事情?

+0

該版本和編碼是(或多或少)默認值。爲什麼你想要明確? – Quentin

+0

確實如此,但是:「XML聲明是一種處理指令,它將文檔標識爲XML,所有XML文檔應以XML聲明開頭。」 [鏈接](http://xmlwriter.net/xml_guide/xml_declaration.shtml) –

+0

我不認爲這是一個很好的來源......但[規範同意](http://www.w3.org/TR/) xml /#sec-prolog-dtd) – Quentin

回答

16

我使用Spring的Android發送XML請求,並面臨同樣的問題。這裏的代碼是基於@ implicit_knowledge的解決方案來解決它,以防萬一需要它。

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