使用简单XML框架inheritance
我正在使用Simple XML Framework来解析XML文件。
从服务器我收到XML-File,如下所示:
我有一个接口(或超类) 对象和两个子类A和B.
是否可以反序列化此XML-Document?
我在教程中看到有可能用类 -attribute来区分子类 ,但不幸的是,这对我来说是不可能的。 有没有办法选择框架在type属性的基础上选择正确的子类?
我不能使用另一个框架(如JAXB)因为我使用Android ..
如果您愿意对XML进行一次小的更改,那么简单的XML也可以这样做。 因此,在您的示例中,您可以将xml更改为如下所示:
然后你可以有以下java:
@ElementListUnion({ @ElementList(entry = "A", inline = true, type = A.class), @ElementList(entry = "B", inline = true, type = B.class) } private List objects;
这就是它真正存在的一切。 虽然我不认为它可以基于属性完成。 我可能是错的,你可能想要阅读那个文档 。
如果您不能使用class属性,这将是棘手的,如下所示:
为什么在将type="A"
使用正则表达式替换type="A"
和type="B"
属性,然后将其提供给Simple XML反序列化器? 例如:
xml = xml.replaceAll("type=\"([A-Za-z0-9_]+)\", "class=\"$1\"");
我能够使用这个技巧解析由.NET的XML序列化程序生成的XML,它使用属性xsi:type
来指示多态列表中的特定类类型,例如此类。