[英]Unmarshall inner CDATA in xml String
我需要在我的代碼中解組以下名為retornoExtrato
的 xml 字符串
<?xml version="1.0" encoding="UTF-8" ?>
<extrato xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<erro>
<codigo/>
<descricao/>
</erro>
<consultaextrato>
<header><![CDATA[SOME MULTIPLE
LINES HEADER]]></header>
<body><![CDATA[SOME MULTIPLE
LINES BODY]]></body>
<trailer><![CDATA[SOME MULTIPLE
LINES TRAILER]]></trailer>
</consultaextrato>
</extrato>
進入Extrato
object,這是我的類(默認情況下省略構造函數、getter 和 setter)
@XmlRootElement(name = "extrato")
public class Extrato {
private Erro erro;
private ConsultaExtrato consultaExtrato;
}
@XmlRootElement(name = "erro")
public class Erro {
private String codigo;
private String descricao;
}
@XmlRootElement(name = "consultaextrato")
public class ConsultaExtrato {
private String header;
private String body;
private String trailer;
@XmlCDATA
public String getHeader() {
return header;
}
@XmlCDATA
public String getBody() {
return body;
}
@XmlCDATA
public String getTrailer() {
return trailer;
}
}
解組時的情況是:
Erro
總是被掩蓋ConsultaExtrato
正在獲取 nullUnmarshaller jaxbUnmarshaller = JAXBContext.newInstance(Extrato.class).createUnmarshaller();
Extrato extrato = (Extrato) jaxbUnmarshaller.unmarshal(new StringReader(retornoExtrato));
另一方面,如果我創建一個 xml 只帶有consultaextrato
標簽,它就會被解組。 但它似乎不能用作內部標簽。
我在所有類中都嘗試了一些額外的 jaxb 注釋,沒有一個有效。 我在這里想念什么?
You need to tell JAXB that the XML element <consultaextrato>
within the <extrato>
element corresponds to the Java property consultaExtrato
in your Extrato
class.
為此,您可以使用@XmlElement
注釋此屬性(或者更確切地說它的 getter 或 setter 方法)並在此處提供 XML 名稱:
@XmlElement(name = "consultaextrato")
如果您不這樣做,那么 JAXB 將從 Java 屬性名稱中派生consultaExtrato
元素名稱(即,因為不同的拼寫方式而無法匹配)。
順便說一句: @XmlRootElement(name = "consultaextrato")
僅當<consultaextrato>
是您的 XML 內容的根元素時才有效,但如果<consultaextrato>
是另一個元素中的嵌套元素(在您的情況下)則無效<extrato>
元素內)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.