XML绑定使用POJO和JAXB注解(Binding XML using POJO and JAXB

2019-06-26 00:24发布

我有我想通过一个POJO和使用JAXB注释绑定它下面的XML格式。 该XML格式如下:

 <datas>
   <data>apple<data>
   <data>banana<data>
   <data>orange<data>
 <datas>

我试图通过以下POJO的数据绑定:

@XmlRootElement()
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  @XmlElement
  private List<String> data;

  //get/set methods

}

同时,我尝试这个POJO:

@XmlRootElement()
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  @XmlElement
  private List<Data> datas;

  //get/set methods

}

//

@XmlRootElement()
@XmlAccessorType(XmlAccessType.FIELD)
public class Data{

  @XmlElement
  private String data;

  //get/set methods

}

在第一种情况下,它仅检索第一个数据:苹果。 在第二种情况下不检索任何东西。 可能有人帮我提供相应的POJO和注解,以绑定的所有数据?

Answer 1:

你可以做下列选项之一:

选项1

日期

package forum11311374;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  private List<String> data;

  //get/set methods

}

欲获得更多信息

  • http://blog.bdoughan.com/2010/09/jaxb-collection-properties.html

OPTION#2

日期

package forum11311374;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  @XmlElement(name="data")
  private List<Data> datas;

  //get/set methods

}

数据

package forum11311374;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class Data{

  @XmlValue
  private String data;

  //get/set methods

}

欲获得更多信息

  • http://blog.bdoughan.com/2011/06/jaxb-and-complex-types-with-simple.html

下面可以用这两个选项一起使用:

input.xml中/输出继电器

我已经更新了XML文档包含了必要的结束标记。 <data>apple</data>代替<data>apple<data>

<datas>
   <data>apple</data>
   <data>banana</data>
   <data>orange</data>
 </datas>

演示

package forum11311374;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Datas.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11311374/input.xml");
        Datas datas = (Datas) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(datas, System.out);
    }

}


Answer 2:

第一个选项没有工作对我来说...不知道为什么你所得到的问题...尝试该注释...

@XmlElements(@XmlElement(name="data", type=String.class))
private List<String> datas; //ignore the variable name


文章来源: Binding XML using POJO and JAXB annotations
标签: java jaxb pojo