解组 xml 字符串中的内部 CDATA
Unmarshall inner CDATA in xml String
我需要解组以下 xml 代码中名为 retornoExtrato
的字符串
<?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
总是被 umarshelled
ConsultaExtrato
变为空值
Unmarshaller jaxbUnmarshaller = JAXBContext.newInstance(Extrato.class).createUnmarshaller();
Extrato extrato = (Extrato) jaxbUnmarshaller.unmarshal(new StringReader(retornoExtrato));
另一方面,如果我创建一个只有 consultaextrato
标签的 xml,它就可以解组了。但它似乎不能用作内部标签。
我已经在所有 类、none 中尝试了一些额外的 jaxb 注释。我在这里错过了什么?
您需要告诉 JAXB XML 元素 <consultaextrato>
<extrato>
元素内对应于
Java 属性 consultaExtrato
在你的 Extrato
class.
你可以通过注释这个 属性(或者更确切地说是它的 getter 或 setter 方法)来做到这一点
@XmlElement
and giving the XML name 那里:
@XmlElement(name = "consultaextrato")
如果您不这样做,那么 JAXB 将导出 XML 元素名称
来自 Java 属性 名称(即 consultaExtrato
),因此
由于拼写不同,无法匹配。
顺便说一句: @XmlRootElement(name = "consultaextrato")
仅当 <consultaextrato>
是根元素时才有效
您的 XML 内容,但如果 <consultaextrato>
是嵌套的
另一个元素中的元素(在你的例子中 <extrato>
元素).
我需要解组以下 xml 代码中名为 retornoExtrato
的字符串
<?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
总是被 umarshelledConsultaExtrato
变为空值
Unmarshaller jaxbUnmarshaller = JAXBContext.newInstance(Extrato.class).createUnmarshaller();
Extrato extrato = (Extrato) jaxbUnmarshaller.unmarshal(new StringReader(retornoExtrato));
另一方面,如果我创建一个只有 consultaextrato
标签的 xml,它就可以解组了。但它似乎不能用作内部标签。
我已经在所有 类、none 中尝试了一些额外的 jaxb 注释。我在这里错过了什么?
您需要告诉 JAXB XML 元素 <consultaextrato>
<extrato>
元素内对应于
Java 属性 consultaExtrato
在你的 Extrato
class.
你可以通过注释这个 属性(或者更确切地说是它的 getter 或 setter 方法)来做到这一点
@XmlElement
and giving the XML name 那里:
@XmlElement(name = "consultaextrato")
如果您不这样做,那么 JAXB 将导出 XML 元素名称
来自 Java 属性 名称(即 consultaExtrato
),因此
由于拼写不同,无法匹配。
顺便说一句: @XmlRootElement(name = "consultaextrato")
仅当 <consultaextrato>
是根元素时才有效
您的 XML 内容,但如果 <consultaextrato>
是嵌套的
另一个元素中的元素(在你的例子中 <extrato>
元素).