java - 在 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>
于类中的 JavaconsultaExtrato
属性Extrato
。
为此,您可以使用注释该属性(或者更确切地说是它的 getter 或 setter 方法)@XmlElement
并在其中给出 XML名称:
@XmlElement(name = "consultaextrato")
如果您不这样做,那么 JAXB 将从 Java 属性名称(即consultaExtrato
)派生 XML 元素名称,因此由于拼写不同而无法匹配。
顺便说一句:@XmlRootElement(name = "consultaextrato")
只有当它<consultaextrato>
是你的XML内容的根元素时才会有效果,但如果<consultaextrato>
它是另一个元素内的嵌套元素(在你的情况下是在<extrato>
元素内)则没有效果。
推荐阅读
- hex - 这是什么文本:=B0=A1=C1=CB ...以及如何将其转换为普通文本?
- python - 在 python 中安装 Latex 以更改绘图的字体
- python - 如何将数组读入 matplotlib 图中?
- foreach - SwiftUI:如何在 ForEach 循环中不显示“case none”
- asp.net-core - 如何为 POST 方法控制器 net core 定义 ocelot 配置?
- java - 尝试将 AWS X-Ray 与 java spring @Scheduled 一起使用时收到 SubsegmentNotFoundException
- virtualization - 如何使用三星 PM1733/1735 NVMe SSD 设置 SR-IOV
- python - 删除熊猫字符串列中的重复字符?
- c# - C# Regex DataAnnotations 未检测到结束行
- vb.net - 如何将 DataGridview 数据导入 Excel