如何解决在 xml 字符串中解组内部 CDATA
我需要在我的代码中解组以下名为 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
对象,这是我的类(默认情况下省略的构造函数、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
为空
Unmarshaller jaxbUnmarshaller = JAXBContext.newInstance(Extrato.class).createUnmarshaller();
Extrato extrato = (Extrato) jaxbUnmarshaller.unmarshal(new StringReader(retornoExtrato));
另一方面,如果我创建一个只有 consultaextrato
标签的 xml,它会被解封。但它似乎不能用作内部标签。
我在所有类中都尝试了一些额外的 jaxb 注释,但都没有奏效。我在这里错过了什么?
解决方法
您需要告诉 JAXB XML 元素 <consultaextrato>
<extrato>
元素内对应于
consultaExtrato
类中的 Java 属性 Extrato
。
您可以通过注释此属性(或者更确切地说是它的 getter 或 setter 方法)来完成此操作
使用 @XmlElement
并在那里提供 XML name:
@XmlElement(name = "consultaextrato")
如果不这样做,那么 JAXB 将派生 XML 元素名称
来自 Java 属性名称(即 consultaExtrato
),因此
由于拼写不同而无法匹配。
顺便说一句:@XmlRootElement(name = "consultaextrato")
仅当 <consultaextrato>
是根元素时才有效
您的 XML 内容,但如果 <consultaextrato>
是嵌套的
另一个元素中的元素(在您的情况下在 <extrato>
元素).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。