java - Xstream 映射 XML 的 "choice"元素

标签 java xml-serialization xstream

我需要使用 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 个类,即。 VehicleCarWrapper ->(有)CarVehicleTruckWrapper ->(有)TruckVehicleBikeWrapper ->(拥有)自行车VehicleTractorWrapper ->(拥有)拖拉机

除了破旧的解决方案之外,还有人有其他建议吗? Xstream 中有没有一种方法可以映射 XML 根的这种“选择”元素?因此,所有 4 个(即卡车、汽车、自行车、拖拉机)都可以作为关联实体进入包装器,但 XStream 始终忽略除一个关联之外的所有关联,因此创建了一个符合 XSD 的 XML。

希望我的问题很清楚。

非常感谢!

最佳答案

解决方法如下:

车辆类别:

公共(public)类车辆{ @XStreamAlias("vehicleAttribute") 字符串车辆属性;

汽车类:

@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>

关于java - Xstream 映射 XML 的 "choice"元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735254/

相关文章:

java - 使用动态字段反序列化嵌套 XML

c# - 将 xstream 生成的 xml 读入 .net

java - 使用 GWT RequestBuilder 通过 Google 检查密码强度

java - 在 Java 8/jsr310 中格式化持续时间

c# - 如何在使用 XmlWriter 执行 XmlSerialization 时添加命名空间?

asp.net-mvc - 如何在asp.net web api中将xml序列化为所需的格式

java - Tomcat 7 受限 (ContainerServlet) 错误

java - 默认类多态性 Jackson Java

java - 将字符串 XML 解析为 Java 对象时出现 OutOfMemory

java - 在Java Xstream中如何更改对象内的别名?