簡體   English   中英

在 xml 字符串中解組內部 CDATA

[英]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正在獲取 null
Unmarshaller 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM