当前位置: 首页 > 知识库问答 >
问题:

使用标记名称的多个选项将XML映射到Java

万俟经纶
2023-03-14

我需要解析一个XML文件,然后将其映射到一个Java对象。到目前为止,我使用带注释的POJO来执行此操作:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"title", "id", "eventList"})
@XmlRootElement(name = "MyClass")
public class MyClass {

  @XmlElement(name = "Title", required = true)
  protected String title;

  @XmlElement(name = "Id", required = false)
  protected String id;

  @XmlElement(name = "EventList", required = true)
  protected EventList eventList;
}

然后用JAXB解组它:

MyClass myObj = (MyClass) unmarshaller.unmarshal(new StreamSource(fis))

问题:有时,我的客户发送的文件具有稍微不同的标记名(例如,< code>Eventlist而不是< code>EventList)

是否有允许标记同时使用两个名称的选项?到目前为止,我通过在POJO中给出2个属性来解决这个问题:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"title", "id", "eventList"})
@XmlRootElement(name = "MyClass")
public class MyClass {

  @XmlElement(name = "Title", required = true)
  protected String title;

  @XmlElement(name = "Id", required = false)
  protected String id;

  @XmlElement(name = "EventList", required = false)
  protected EventList eventList;

  @XmlElement(name = "Eventlist", required = false)
  protected EventList eventlist;
}

这个很难维护,禁止我使用‘必填’属性,你有更好的解决办法吗?

共有1个答案

田博易
2023-03-14

我不确定是否有添加多个名称的选项,但您可以做的是:

使字段私有,并为其添加获取器和设置器。您可以为事件列表字段创建 2 个获取器和设置器,并使用不同的名称对它们进行注释。正如我所看到的,由于此字段不是必需的,因此不会有问题。

虽然…正如我现在看到的,问题实际上已经解决了。请参阅此处:JAXB:为同一元素使用多个名称来解组xml

 类似资料:
  • 我将php中的Symfony与此捆绑包一起使用:https://github.com/hslavich/OneloginSamlBundle 使用onelogin php saml工具包:https://github.com/onelogin/php-saml 身份验证时我的IDP返回需要从oid映射到友好名称的属性 如果我在symfony bundles配置中使用oid名称,并且没有友好的名称,

  • 我有4张桌子: 库存(库存ID、可用数量) 一个客户可以有多个订单,而一个订单由多个orderDetails项目组成。我正在尝试将库存项目存储在由库存项目和数量整数组成的映射中。 当我尝试以这种方式持久化它时,第一个库存项目将以1的orderID添加到Order详细信息表中。但是下一个是使用2的orderID插入的(不存在)。 有什么帮助吗?

  • 当我运行下面的代码片段时,我得到了下面的XML示例,所有的标记名都是小写的。我一直在尝试启用/禁用特性,但没有发现任何可以打开/关闭、强制删除小写XML标记的功能。

  • 下面是我想尝试使用java收集器编写的代码。 给定一个人的2个属性(firstname和lastname),我想获得一个包含唯一的firstname或lastname作为键的地图,以及相应的人的列表。 和填充映射的代码: 我不知道如何将firstname或lastname作为键(不像Java8中的Group by multiple field names)。我一定要写我自己的收藏家吗?

  • 我把这三门课分别放在不同的文件中 我有下面的映射器 这目前仅映射lastName并起作用,我想将Book中的作者字符串映射为 我怎么能这么做?我在MapStruct文档中找不到任何东西。

  • 问题内容: 我有一个包含循环的对象图。我如何让JAXB处理呢?我尝试在子类中使用批注,但JAXB编组器仍检测到周期。 问题答案: 使用JAXB的好处是它是具有多个实现的标准运行时(就像JPA一样)。 如果使用EclipseLink JAXB(MOXy),则可以使用许多扩展来处理JPA实体,包括双向关系。这是使用MOXy @XmlInverseReference批注完成的。它的作用类似于元帅上的@X