JAXB实现

时间:2013-06-12 09:11:19

标签: java xml jaxb

我有一个动态结构的xml。例如:

<aggregator>
    <aggregationType>Voting</aggregationType>
    <decimalPrecision>4</decimalPrecision>
    <seed>2</seed>
    <HTepsilon>0.0050</HTepsilon>
    <WLWmaxIterations>100</WLWmaxIterations>
    <WLWepsilon>0.0050</WLWepsilon>
</aggregator>

在上面的xml中,aggregator标记可以具有不同的结构。它取决于aggregationType。

标记HTepsilonWLWmaxIterationsWLWepsilon的存在取决于aggregationType

截至目前,这些标签总是需要在xml中提及,但我期待以这样的方式改变它,即它们具有基于aggregationType标签的条目。

在这种情况下,我应该如何为此标记定义我的Java类。截至目前,我正在将aggregationType与所有可能的值进行比较,并检索相应的标记值。

在一个地方代码中的一个小错误在这个设计中可能是致命的。

2 个答案:

答案 0 :(得分:0)

你是什么意思“标签HTepsilon,WLWmaxIterations和WLWepsilon,存在取决于aggregationType”。你能否扩展“依赖”政策?我建议你定义XSD,然后定义数据模型。 JAXB可以从XSD定义为您生成java类。

答案 1 :(得分:0)

如何定义基本聚合器类型,然后定义必要的扩展。例如:

<xsd:complexType name="Aggregator" abstract="true">
<xsd:sequence>
<xsd:element name="aggregationType" type="xsd:string">
</xsd:element>      
<xsd:element name="decimalPrecision" type="xsd:int">
</xsd:element>      
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="HTepsilonAggregator">
<xsd:complexContent>
<xsd:extension base="Aggregator">
<xsd:sequence>
<xsd:element name="HTepsilon" type="xsd:double"></xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>