当前位置: 首页 > 面试题库 >

使用POJO和JAXB批注绑定XML

卢开济
2023-03-14
问题内容

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


问题答案:

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

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

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

}


 类似资料:
  • 问题内容: 我需要一些有关JAXB Annotations的帮助,但找不到好的文档可以帮助我解决这个问题。 我有一个要编入XML的类。我的班级看起来像这样: 召回类如下所示: 因此,它将产生以下XML输出: 但是我希望ArrayList以不同的方式显示,如下所示: 知道我该怎么做吗?我认为问题出在我的架构上,但我将其用于编组: 任何想法如何解决这一问题?谢谢! 问题答案: 试试这个: 从文档中:

  • 问题内容: 我正在使用JAXB和xjc将XML Schema编译为Java类。我不想手动编辑此生成的类。我有这样的xml模式: xjc生成仅包含对象列表的类。是否有机会省略该类并直接在该类中具有对象列表? 我知道可以通过注释来完成,但是我不知道如何告诉xjc创建此类注释。 感谢您的任何建议! 最好的问候,马库斯 问题答案: Bjarne Hansen为xjc开发了一个插件,可以解决此问题。不幸的是

  • 问题内容: 我在这里使用教程来了解JAXB。 当作者开始创建文档的根时,作者开始如下: 尽管我将手动生成类而不是让Eclipse生成类,但我将提供一个jar文件(未打包在其中,而是在包含jar文件的文件夹中),以便在我的应用程序启动时验证XML文档是否已被篡改。 因此,在XSD文件中,将会是 因为上面已将其声明为?? 问题答案: 我建议使用包级别注释为模型指定名称空间限定。程序包级别的注释位于一个

  • 问题内容: 我有一个Json响应,如下所示: 我不知道参数的名称和数量。因此,我需要并且想要将所有这些参数绑定到由<“ paramX”,“ valueX”>元组组成的java.util.Map字段。为此,我尝试了以下代码,但“ parametersMap”字段返回null。 如何使用JAXB批注实现这种绑定? 提前致谢。 问题答案: 基本上,您需要一个xml适配器。您可以摆弄KeyValue类上的

  • 问题内容: 我有以下豆类 以及相应的编组代码 我想使属性在运行时可配置,我想在运行时在“ num”上指定@xmltransient而不进行编译。我该怎么办? 问题答案: 注意: 我是 EclipseLink JAXB(MOXy)的 负责人,并且是 JAXB 2(JSR-222) 专家组的成员。 MOXy JAXB实现提供了通过其扩展在运行时操纵映射元数据的功能。有关详细示例,请参见: http:/

  • 我正在使用来自第三方系统的一组DTD。我们的目标是将XML请求(符合这些DTD的请求映射到java中,然后将XML响应发送回系统)。 DTD是一成不变的(我无法控制更改它们)。 因此,为了进行映射,我使用XMLSpy将dtd转换为XML Schemas (xsd ),然后使用XJC编译器创建Jaxb绑定类。我用的是Java 7。 问题是,DTD 实际上没有命名空间。我有20个不同的DTD。10 表