2009-10-30 52 views
10

我想弄清楚一個簡單的方法來映射到一個普通的舊Java對象的XML文件。簡單的Java Xml到POJO映射/綁定?

注意:在我的例子中,xml與我預期的POJO不太匹配。

///////// THE XML 
<?xml version="1.0" encoding="UTF-8"?> 
<Animal> 
    <standardName> 
    <Name>Cat</Name> 
    </standardName> 
    <standardVersion> 
    <VersionIdentifier>V02.00</VersionIdentifier> 
    </standardVersion> 
</Animal> 


////// THE INTENDED POJO 
class Animal 
{ 
private String name; 
private String versionIdentifier; 
} 

定期JAXB(有註解)將無法正常工作的JAXM元素名稱標註不容許我specifiy嵌套元素。 (即standardName/Name)。

我看過Jibx,但它看起來過於複雜,沒有提供完整的示例來說明我想要做什麼。

卡斯特羅似乎能夠做我想做的事(使用映射文件),但我不知道是否有任何其他可能的解決方案。 (可能會讓我跳過映射文件,只允許我指定註釋中的所有內容)。

感謝

+0

作爲附加的註釋,映射/結合將必須是雙向的。 – vicsz 2009-10-30 20:08:23

回答

3

這篇文章可以幫助你......它只需要你知道的XPath http://onjava.com/onjava/2007/09/07/schema-less-java-xml-data-binding-with-vtd-xml.html

+2

看起來像這樣可能會是我們最好的選擇(不包含映射文件或註釋),但只是使用某種形式的使用xpath的轉換器方法,可能還有vtdxml或dom。 – vicsz 2009-10-30 20:14:42

+1

對消化器要小心,它不是一個完整的解析器,對於大的XmL文檔可能會很慢 – 2009-10-30 20:38:18

2

我考慮的JiBX的最好的一羣(JAXB,蓖麻,XMLBeans的,等),特別是因爲我喜歡在註釋映射文件。誠然,它有一個體面的學習曲線,但網站有很多很好的例子。你一定錯過了tutorial

如果你只是單向(XML - > POJO),你可以使用Digester

邊評論:我更喜歡映射文件在註釋因爲註釋:

  • 混亂的代碼(使用幾種產品的註釋尤其當)(域層XML,數據庫等)
  • 組合關注
  • 只能綁定到一個XML(或數據庫或Web服務等)表示
+0

我閱讀了教程,但除非我錯過了一些東西......似乎需要一些額外的步驟(與Castro相比),即運行bindgen的要求。 (這在網站上並不是很容易解釋)。這看起來像是一個過度複雜的操作,必須在映射文件上運行bindgen才能使用它們。 是否有簡單的教程/片段可用? 即給出這個xml文件,這個xml映射文件和這段代碼,你會得到這個POJO實例。 – vicsz 2009-10-30 20:05:36

+0

EclipseLink JAXB(MOXy)也提供了一個映射文件。這使您可以自由使用註釋(標準JAXB和擴展)或映射文件。 – 2010-07-08 15:30:02

4

EclipseLink JAXB (MOXy)允許你這樣做,你正在尋找的基於路徑的映射:

@XmlRootElement 
class Animal 
{ 
@XmlPath("standardName/Name/text()") 
private String name; 

@XmlPath("standardVersion/VersionIdentifier/text()"); 
private String versionIdentifier; 
} 

欲瞭解更多信息,請參閱:

的EclipseLink還允許元數據來使用外部配置文件中指定:

+0

'EclipseLink JAXB(MOXy)'鏈接重定向到* 404 * – 2017-03-06 05:10:15

+0

當前鏈接是http://www.eclipse.org/的EclipseLink /#MOXY – 2017-08-15 04:09:38