我需要使用 XStream 将受 XSD 约束的 XML 映射到 Java 对象。
XSD 有 4 个复杂类型元素,它们是“选择”元素,即这 4 个元素之一可以出现在根标记下的 XML 中。
我一直在研究 XStream,但在我看来,要映射这样的 XML,我需要 8 个类。如何?这里是...
举例来说,我的根元素是 VEHICLE,XML 中的每个复杂类型是 a) CAR b) BIKE c) TRUCK d) TRACTOR。它们每个都有不同的属性。为了将其映射到 Xstream 并使 XML(由 XStream 生成)兼容 XSD,我们需要 8 个类,即:车辆汽车包装纸->(有一个)Car, 车辆卡车包装->(有一个)Truck, 车辆自行车包装纸->(有一个)Bike and 车辆拖拉机包装机->(有一个)Tractor.
除了破旧的解决方案之外,还有人有建议吗? Xstream 中有没有办法映射 XML 根的此类“选择”元素?因此,所有 4 个实体(即卡车、汽车、自行车、拖拉机)都可以作为关联实体进入 Wrapper,但 XStream 始终忽略除一个关联之外的所有关联,从而创建符合 XSD 的 XML。
希望我的问题很清楚。
非常感谢!
这是解决方案:
车辆类别:
公共类车辆{
@XStreamAlias(“车辆属性”)
字符串车辆属性;
}
汽车类别:
@XStreamAlias("car")
public class Car extends Vehicle {
@XStreamAlias("carattribute")
String carAttribute;
}
自行车类:
@XStreamAlias("bike")
public class Bike extends Vehicle {
@XStreamAlias("vehicleattribute")
String bikeAttribute;
}
然后是一些XStream配置:
XStream xstream = new XStream();
xstream.processAnnotations(Car.class);
xstream.processAnnotations(Bike.class);
xstream.processAnnotations(Vehicle.class);
创建一些车辆并告诉 XStream 到 XML'em。
System.out.println(xstream.toXML(v1));
System.out.println(xstream.toXML(v2));
这是您想要的输出:
<car>
<carattribute>my car</carattribute>
</car>
<bike>
<vehicleattribute>my bike</vehicleattribute>
</bike>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)