JAXB和XSD:element,complexType by属性值

时间:2012-06-01 09:43:59

标签: xsd jaxb

我的XML文件包含root元素,然后是许多item元素作为root的子元素。 所以它看起来像这样:

<root>
   <item type=type1 id=1>...</item>  
   <item type=type1 id=2>...</item>  
   <item type=type2 id=3>...</item>  
   <item type=type3 id=4>...</item>  
</root>

每个item元素都有一个属性,说明我们正在处理的项目类型。 在当前的XSD中 xs:element name="root"是complexType,其序列为item complexType。 我正在使用JAXB将我的XML文件映射到Java对象。现在我必须获取所有项目并根据其类型创建新的特定对象。它变得越来越复杂,因为每个项类型都有自己的字段集(子节点)。我有没有机会告诉JAXB(通过XSD)有不同类型的items并根据项目的name属性创建我需要的对象?因此,对于每个项目,应该有单独的complexType(将映射到java对象)。

如果我的XML看起来像这样就可以了:

<root>
   <item1 id=1>...</item1>
   <item1 id=2>...</item1>
   <item2 id=3>...</item2>
   <item3 id=4>...</item3>
</root>

1 个答案:

答案 0 :(得分:0)

如果您可以更改XML,那么您可以使用 合格的 类型类型属性> attribute xsi:type(xsi是与XML Schema Instance命名空间关联的前缀)然后:

  • 您的架构需要提供这些类型的定义

那就是它......

如果你不能(值得一试),this post on SO可以帮助你。