2012-08-17 105 views
1

我的應用程序收到一個很長的XML文檔,我想用它來填充一個Java對象。JAXB只解析XML文件的深層嵌套子集

但是,儘管XML中有大量嵌套深度的元素,但我只對其中的一小部分感興趣。我也只是想從XML到Java。我不需要將我的Java對象整理回XML的功能。

我想盡可能使用JAXB,因爲我的應用程序的依賴關係已經包含Eclipselink MOXy。但是,我不確定如何只抓取一些深度嵌套的元素值。我看着@XmlElementWrapper註釋,並想過用它來詮釋我的Java類字段是這樣的:

... 
@XmlElementWrapper(name="LEVEL_1/SUBLEVEL_1/YET_ANOTHER_SUBLEVEL") 
@XmlElement(name="STATUS") 
private String statusCode; 
... 

不過,我不知道這是否name屬性是有效的。反正我沒有那麼遠......編譯器告訴我@XmlElementWrapper只能在成員變量是Collection類型時使用。我試圖拉的大部分字段都是單個值。

我試圖跳過@XmlElementWrapper註釋,並查看是否單獨@XmlElement會明白的XPath值:

... 
@XmlElement(name="LEVEL_1/SUBLEVEL_1/YET_ANOTHER_SUBLEVEL/STATUS") 
private String statusCode; 
... 

雖然這不會造成編譯錯誤,它也不起作用。在運行時,Eclipselink只需在此字段中以null實例化我的對象。

有沒有我缺少的東西,或者我試圖用JAXB做什麼?

回答

1

這可以使用擴展名爲@XmlPath的EclipseLink JAXB(MOXy)完成。

@XmlPath("LEVEL_1/SUBLEVEL_1/YET_ANOTHER_SUBLEVEL/STATUS/text()") 
private String statusCode; 

更多信息

+1

謝謝!不過,您可能想要編輯此代碼段。事實證明,@XmlPath路徑註釋只是接受一個路徑字符串......沒有「name =」前綴。 – 2012-08-17 19:20:41

+0

@StevePerkins - 好的,我已經修復了這個片段。 – 2012-08-17 19:22:31