2009-09-30 62 views
14

我期待轉化的一類,看起來像這樣...什麼是Text節點值的Jaxb等價物?

public class Amenity { 
    public String id; 
    public String value; 
} 

到下面的XML使用JAXB註釋:

<amenity id="id-string-here">value-string-here</amenity> 

有誰知道在value成員變量使用什麼註釋完成這個?到目前爲止,我已經得到的最接近的是:

@XmlRootElement 
public class Amenity { 
    @XmlAttribute 
    public String id; 
    @XmlElement 
    public String value; 
} 

不幸的是這種方法不容許我以指定value成員變量不應該被渲染爲自己的標籤<value></value>

+0

如許多人提到這個問題的標題是誤導性的,因爲它要求如何呈現CDATA塊,但上面的例子沒有清楚地說明這一點。在我發佈的時候,我不需要CDATA塊,但只需要瞭解@XmlValue註釋。這就是我爲什麼將答案授予jarnbjo的原因。 從那時起,我確實需要有關如何生成CDATA塊的信息;所以隨後的答案也很有幫助。我已經投了每個。 感謝大家的幫助! – ra9r 2010-07-17 20:16:31

回答

21

我不是100%確定這一點,但嘗試使用@XmlValue註釋而不是@XmlElement

+3

+1這完全正確 – skaffman 2009-09-30 12:23:20

0

JAXB不支持到/來自CDATA xml類型的封送/編組。

+1

JAXB規範不包括CDATA,但是JAXB實現(如EclipseLink JAXB(MOXy))確實包含處理CDATA的擴展,http://bdoughan.blogspot.com/2010/07/cdata-cdata- run-run-data-run.html – 2010-07-15 13:13:21

4

它看起來像這個問題指的是文本節點不CDATA節點,但這裏是對的EclipseLink JAXB(莫西)如何處理CDATA鏈接:

+2

不知道爲什麼這個答案得到反對票。這是留給那些根據標題找到問題的人的利益的。對於它的價值,我在離開我自己之前完成了投票jarnbjo的@XmlValue答案。 – 2010-07-15 13:12:15

+0

感謝您的參考。 CDATA不被認爲是現有規範的一部分,但是我猜想只要StringWriters正確地編碼內部標記就不需要它。 – ra9r 2010-07-15 20:12:34

1

This documentation寫道:

問:如何使Marshaller生成CDATA塊?

答:此功能不能直接從JAXB獲得,但您可以配置Apache Xerces-J XMLSerializer來生成CDATA塊。請查看JaxbCDATASample.java示例應用程序以獲取更多詳細信息。

(順便說一句,這並不能回答你的特定問題,但由於問題的標題是誤導性的,這是jaxb CDATA第一款谷歌的結果,我回答有點不同的問題)