XML的section元素包括一个属性和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)”可以使其正常工作。谢谢
答案 0 :(得分:0)
您在做错的是,认为CDATA节在某种程度上是特殊的,并且可以将其内容与周围的文本区分开来。
换句话说,当您拥有这个时:
<stuff>Hello <![CDATA[Everyone is in the place! ]]>Goodbye</stuff>
您认为您可以提取字符串“ Hello”和另一个字符串“每个人都在这里!”和另一个字符串“再见”。
情况并非如此。您无法做到这一点,您必须忘记尝试这样做。
上面的标记与此标记完全相同:
<stuff>Hello Everyone is in the place! Goodbye</stuff>
如您所见,无法识别原始标记中CDATA部分中可能包含的内容,因为当您尝试使用XML时,CDATA部分根本不存在。 CDATA部分仅是一种语法工具,用于当您想要编写不想不断转义的奇怪文本时,例如
<![CDATA[ <<<<<< &&& Yeah! &&& >>>>>> ]]>
比
更清晰<<<<<< &&& Yeah! &&& >>>>>>
但XML完全相同。
底线:您无法获取CDATA部分的内容。就XML读取而言,它不存在。您只能在<Data>
中获得全部文本。
答案 1 :(得分:0)
请您解释一下如何同时检索属性和CDATA?我尝试了以下方法,但是我只能取出CDATA,而忽略了该属性。也许不能是String类型? @XmlRootElement(name =“ ConfigData”)
公共类ConfigData {
private int configSize;
private String data;
@XmlElement(name="Data")
public void setData(String data) {
System.out.println("ConfigData:" + data);
this.data = data;
}
public String getData() {
return data;
}