2016-11-16 130 views
-1

我有我試圖獲取到XML的簡單對象:封送對象爲XML對象在其內具有XML(JAXB)

@XmlRootElement(name = "MyObject") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class MyObject { 

    @XmlElement(name = "ResultsAsString") 
    private String resultsAsString; 

    @XmlElement(name = "ResultsAsXml") 
    private String resultsAsXml; 
} 

在第二場我傳遞一些XML 。但是,當我嘗試使用JAXB封送對象時:

JAXBContext jaxbContext = JAXBContext.newInstance(MyObject.class); 
Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

第二個字段中的xml出現亂碼。所有的「<」標籤被替換爲「& lt」,引號替換爲「&」,但所有「>」標籤保持不變。爲什麼JAXB對XML的一部分進行編碼而沒有對「>」字符進行編碼?這在我的代碼中很晚就破壞了功能。提前致謝!

+0

我用沮喪的亂碼。是否有原因,但它編碼的部分字符串,但不是其他人?我不介意它是否編碼了所有內容,但目前它編碼的是某些部分,而其他部分未改動,這些部分稍後會破壞其他功能。 – David

回答

0

JAX-B不知道你的財產resultsAsXml包含有效的XML,因此它將其作爲純文本處理。

它具有逸出<&來創建有效的XML,見Extensible Markup Language (XML) 1.1 (Second Edition)

與符號字符(&)和左尖括號(<)不能出現在它們的字面的形式,使用時除外作爲標記分隔符,或註釋,處理指令或CDATA部分。如果它們在其他地方需要,則必須分別使用數字字符引用或字符串「&amp;」和「&lt;」進行轉義。右括號(>)可以使用字符串「&gt;」表示,並且爲了兼容性而必須在內容中出現在字符串「]]>」中時使用「&gt;」或字符引用進行轉義,該字符串爲不標記CDATA部分的結尾。