如何使用JAXB删除XML中的标记

时间:2013-09-04 04:19:02

标签: java xml xslt jaxb marshalling

我正在使用JAXB将java对象转换为xml文件。

在我的XML文件中,我需要在不使用XSLT的情况下删除标记

例如:删除标记订单

<order_List>
  <orders>
    <orderid>12324<orderid>
  </orders>
</order_List>

例外结果:

<order_List>
   <orderid>12324<orderid>
</order_List>

1 个答案:

答案 0 :(得分:3)

我可以建议你“天真”的做法。

可以使用JAXB批注orders配置包装器标记@XmlElementWrapper。因此,您可以创建2个模型:一个包含此标记,另一个不包含此标记。您可以使用包含此标记的模型来解析数据,然后将数据复制到不包含此标记的模型,然后使用它来序列化。

@XmlRootElement(name = "index-annotations")
public class OrderList {
   private Collection<Integer> orderIds;

   @XmlElement(name = "orderid", type = Integer.class)
   public Collection<Integer> getOrderId() {
       return orderIds;
   }
}


@XmlRootElement(name = "index-annotations")
public class OutputOrderList extends OrderList {
   @Override
   @XmlElement(name = "orderid", type = Integer.class)
   @XmlElementWrapper(name="orders")
   public Collection<Integer> getOrderId() {
       return orderIds;
   }
}

显然,这个解决方案包含一种重复的代码,但是由于注释有效性的编译时验证,因此使用XML配置2个模式可能更好。