带有属性和 CDATA 的 XML 元素 如何在 Eclipse 中使用 JAXB 检索 b



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("可以使其工作。谢谢

你做错了什么,认为 CDATA 部分在某种程度上很特别,它们的内容可以与周围的文本分开。

换句话说,当你有这个:

<stuff>Hello <![CDATA[Everyone is in the place! ]]>Goodbye</stuff>

你认为你可以提取字符串"你好",另一个字符串"每个人都在这个地方!"和另一个字符串"再见"。

事实并非如此。你不能那样做,你必须忘记试图这样做。

上面的标记与此标记 100% 相同:

<stuff>Hello Everyone is in the place! Goodbye</stuff>

如您所见,无法识别原始标记中的 CDATA 部分中可能存在或可能不存在的内容,因为当您尝试使用 XML 时,CDATA 部分根本不存在。CDATA 部分只是一个语法工具,当您想要编写不想经常转义的奇怪文本时,例如

<![CDATA[ <<<<<< &&& Yeah! &&& >>>>>> ]]>

哪个比

&lt;&lt;&lt;&lt;&lt;&lt; &amp;&amp;&amp; Yeah! &amp;&amp;&amp; &gt;&gt;&gt;&gt;&gt;&gt;

然而,在XML中完全相同。

底线:您无法获取 CDATA 部分的内容。就 XML 读取而言,它不存在。您只能获取<Data>的全部文本。

您能解释一下如何检索属性和 CDATA 吗?我尝试了以下方法,但我只能取出 CDATA,并且省略了该属性。也许它不能是字符串类型? @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;
}

最新更新