我有一个动态结构的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。
标记HTepsilon
,WLWmaxIterations
和WLWepsilon
的存在取决于aggregationType
。
截至目前,这些标签总是需要在xml中提及,但我期待以这样的方式改变它,即它们具有基于aggregationType标签的条目。
在这种情况下,我应该如何为此标记定义我的Java类。截至目前,我正在将aggregationType与所有可能的值进行比较,并检索相应的标记值。
在一个地方代码中的一个小错误在这个设计中可能是致命的。
答案 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>