3

我有以下 xml 格式,我想通过 POJO 并使用 JAXB 注释来绑定它。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

}

在第一种情况下,它只检索第一个数据:apple. 在第二种情况下不检索任何东西。有人可以帮我提供适当的 POJO 和注释以绑定所有数据吗?

4

2 回答 2

4

您可以执行以下选项之一:

选项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

}

了解更多信息


选项 #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

}

了解更多信息


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

输入.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);
    }

}
于 2012-07-03T13:19:12.420 回答
1

第一个选项对我有用......不知道你为什么会遇到问题......试试这个注释......

@XmlElements(@XmlElement(name="data", type=String.class))
private List<String> datas; //ignore the variable name
于 2012-07-03T13:47:11.393 回答