【发布时间】:2018-07-03 04:48:10
【问题描述】:
XML 的一个节元素包括一个属性和 CDATA:
ELEM: nodeName="ConfigData" local="ConfigData"
ATTR: nodeName="ConfigSize" local="ConfigSize" nodeValue="356"
TEXT: nodeName="#text" nodeValue="356"
TEXT: nodeName="#text" nodeValue=[WS]
ELEM: nodeName="Data" local="Data"
ATTR: nodeName="Format" local="Format" nodeValue="L5K"
TEXT: nodeName="#text" nodeValue="L5K"
TEXT: nodeName="#text" nodeValue=[WS]
CDATA: nodeName="#cdata-section" nodeValue="[360,0,6,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]"
TEXT: nodeName="#text" nodeValue=[WS]
TEXT: nodeName="#text" nodeValue=[WS]
TEXT: nodeName="#text" nodeValue=[WS]
我使用了以下代码,但无法获取 CDATA。 @XmlRootElement(name="ConfigData")
public class ConfigData {
private int configSize;
private Data data;
@XmlElement(name="Data")
public void setData(Data data) {
this.data = data;
}
public Data getData() {
return data;
}
}
@XmlRootElement(name="Data")
public class Data {
private String format;
private String cData;
@XmlAttribute(name="Format")
public void setFormat(String format) {
this.format = format;
}
public String getFormat() {
return format;
}
@XmlCDATA()
@XmlJavaTypeAdapter(value=AdapterXmlCDATA.class)
public void setCData(String cData) {
this.cData = cData;
}
public String getCData() {
return cData;
}
}
public class AdapterXmlCDATA extends XmlAdapter<String, String> {
@Override
public String marshal(String value) throws Exception {
return "<![CDATA[" + value + "]]>";
}
@Override
public String unmarshal(String value) throws Exception {
//System.out.println("AdapterXmlCDATA:" + value);
return value;
}
}
如果有人能告诉我我做错了什么,我将不胜感激。我在想,如果在数据类中使用正确的 CDATA 表示法,例如“@XmlCDATA() @XmlJavaTypeAdapter(value=AdapterXmlCDATA.class)" 可以让它工作。谢谢
【问题讨论】:
-
@XmlCDATA() 到底是什么?它的完全限定名称的导入声明是什么?