【问题标题】:Binding XML using POJO and JAXB annotations使用 POJO 和 JAXB 注释绑定 XML
【发布时间】:2012-07-03 12:53:23
【问题描述】:

我有以下 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 和注释以绑定所有数据吗?

【问题讨论】:

    标签: java jaxb pojo


    【解决方案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
    
    }
    

    更多信息


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

    更多信息


    以下两个选项都可以使用:

    input.xml/输出

    我已更新 XML 文档以包含必要的结束标记。 &lt;data&gt;apple&lt;/data&gt; 而不是 &lt;data&gt;apple&lt;data&gt;

    <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);
        }
    
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多