2013-06-12 96 views
2

我有一個具有動態結構的xml。例如:JAXB的實現

<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與所有可能的值並檢索相應的標籤值。

在一個地方的代碼中的一個小錯誤可以證明這個設計是致命的。

+0

'aggregationType'控制寫入XML的內容,讀入內容的內容或兩者兼有嗎? –

+0

抱歉,我沒有看到您的評論。我關心的只是無組織。無論如何,我在設計和解決它。謝謝你的時間。 – s2s

回答

0

你是什麼意思「標籤HTepsilon,WLWmaxIterations和WLWepsilon,存在取決於aggregationType」。你可以擴展「依賴」政策。我建議你從定義XSD開始,在其中定義數據模型。 JAXB可以從XSD定義中爲您生成Java類。

+0

我的意思是這些標籤可能會或可能不會出現在基於aggregationType的xml文件中。例如當aggregationType投票時,實際上他們三個都不會在那裏(不僅僅是空的,標籤將從文件中移除)。相反,當aggregationType的值是WLW 標籤將被提及。 – s2s

+0

@ s2s,如果他們只是可選的,那麼不需要做任何事情。對象字段將被設置爲空。什麼(框架/技術/等)你用於從XML轉換爲對象。 –

+0

嘿!我使用的JAXB沒有註釋。到目前爲止,我已經按照上面的建議實現了它,而這只是我在應用程序中使用的xml文件的一部分,並且對整個層次結構進行空檢查是很容易出錯的。這是唯一的方法來解決還是有更多有用的框架,使用它我可以避免空檢查?我知道我的查詢太抽象,但我只是想探索更多的XML框架。 – s2s

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> 
+0

嗨感謝您的回覆。我研究了設計並改變了方法。再次感謝你和madhav提出的建議。 – s2s