2010-12-21 23 views
0

我正在開發一個JAVA項目,其中嚴格的XSD由第三方提供。 XSD包含以下結構:按照架構的要求在特定位置插入XML中的標記

<sequence> 
    <element name="element1" type="type1" nillable="true" minOccurs="0"/> 
    <element name="element2" type="type2" nillable="true" minOccurs="0"/> 
    <element name="element3" type="type3" nillable="true" minOccurs="0"/> 
</sequence> 

元素必須按照XSD的順序排列。但所有元素都不是強制性的,所以他們可以不在消息中。這裏的列表是簡化的,實際上更長。

如果我想檢查傳入消息中是否存在element3,並且它不存在,則應該採取什麼方法將其插入消息中的正確位置。我必須考慮缺少所有前面的元素,所以我不能依賴element2的存在,並在它後面插入標籤。例如:

<parent> 
    <element2/> 
</parent> 

應該成爲

<parent> 
    <element2/> 
    <element3/> 
</parent> 

我有唯一的解決方案是複雜的,我必須尋找前述元素3(從最近的)的所有元素的存在。如果找到前面的元素,我會在它後面插入。如果沒有找到,我插入父項。我需要將前面的元素存儲在某處(配置或硬編碼)。這似乎不是一個優雅的解決方案。

在Java中這樣做的最好方法是什麼?無論是在代碼中還是使用XSLT。

回答

0

爲此,我建議您使用JAXBXmlBeans。給定一個模式,JAXB編譯器會生成相應的java代碼,以供您解析XML或創建它。

我已經成功地使用XmlBeans的這些類型的使用情況,並明確規定查詢特定元素的存在的API,屬性等

+0

我也考慮過這一點,但我dont't知道xml的編組/解組將改變原始的xml。 XSD非常複雜。藉助XmlBeans,我最終可以完成140多個課程。似乎很多改變一個標籤:) – Alan 2010-12-21 15:12:17