JAXB - 更改结构子节点

时间:2014-10-30 13:40:57

标签: java xml jaxb

我在jaxb中有结构generatade:

<Crm> <codigo>000</codigo> <uf>GO</uf> <crm>7784CRM</crm> <Especialidade> <codigo>13</codigo> <nome>CIRURGIA</nome> </Especialidade> <Especialidade> <codigo>14</codigo> <nome>CIRURGIA GERAL</nome> </Especialidade> </Crm>

我需要这个结构

<Crm> <codigo>0000</codigo> <uf>GO</uf> <crm>0000CRM</crm> <Especialidade> <codigo>13</codigo> <nome>CIRURGIA PLASTICA</nome> <codigo>14</codigo> <nome>CIRURGIA GERAL</nome> </Especialidade> </Crm>

CrmDTO课程:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class CrmDTO extends ParentDTO {

@XmlElement(name="codigo")
private Long CODIGO;

@XmlElement(name="uf")
private String UF;

@XmlElement(name="crm")
private String CRM;

@XmlElement(name = "Especialidade")
private List<EspecialidadeDTO> especialidades;

EspecialidadeDTO类:

@XmlType(propOrder= {"CODIGO", "NOME"})
@XmlAccessorType(XmlAccessType.FIELD)
public class EspecialidadeDTO extends ParentDTO {

@XmlElement(name="codigo")
private Long CODIGO;

@XmlElement(name="nome")
private String NOME;

我尝试了几种方法,无法按照我想要的方式提供帮助。 放一些注释我发现了一些教程但是失败了

1 个答案:

答案 0 :(得分:1)

您需要将namecodigo元素表示为使用List注释的一个@XmlElements属性,以获取您要查找的行为:

@XmlRootElement(name="Crm")
@XmlAccessorType(XmlAccessType.FIELD)
public class CrmDTO extends ParentDTO {

    @XmlElement(name = "codigo")
    private Long CODIGO;

    @XmlElement(name = "uf")
    private String UF;

    @XmlElement(name = "crm")
    private String CRM;

    @XmlElementWrapper(name="Especialidade")
    @XmlElements({
      @XmlElement(name="codigo", type=Long.class),
      @XmlElement(name="name", type=String.class)
    })
    private List<Object> especialidades;

}