2011-08-18 66 views
2

請注意,這不是我詢問的另一個問題的重複,「With MOXy and XPath, is it possible to unmarshal a list of attributes?」它是相似的,但不一樣。使用MOXy和XPath,是否可以解組兩個屬性列表?

我有XML,看起來像這樣:

<test> 
    <items> 
    <item type="cookie" brand="oreo">cookie</item> 
    <item type="crackers" brand="ritz">crackers</item> 
    </items> 
</test> 

這類似於我先前討論的XML除了現在有每個項目,而不是一兩個屬性。

在我的課:

@XmlPath("items/item/@type") 
@XmlAttribute 
private ArrayList<String> itemList = new ArrayList<String>(); 
@XmlPath("items/item/@brand") 
@XmlAttribute 
private ArrayList<String> brandList = new ArrayList<String>(); 

感謝回答我剛纔的問題我可以給type屬性解組到列表中。然而,brandList是空的。如果我註釋掉註釋itemList(所以它不是由JAXB/MOXy填充),那麼brandList包含正確的值。

看來我只能使用XPath將單個屬性解組到列表中。這是由設計還是我配置了錯誤的東西?

更新:看來我不能解組文本和元素的屬性。如果我的類映射是這樣的:

@XmlPath("items/item/text()") 
@XmlElement 
private ArrayList<String> itemList = new ArrayList<String>(); 
@XmlPath("items/item/@brand") 
@XmlAttribute 
private ArrayList<String> brandList = new ArrayList<String>(); 

brandList也是在這種情況下是空的。如果我切換訂單並先映射brandList,則itemList爲空。就好像第一個映射消耗元素,所以基於該元素或其屬性的更多值不能被讀取。

+0

你有最新版本的Moxy嗎?我遇到了一些使用舊版本(在更新到最新版本時消失)的XPath屬性過濾錯誤。 – Thilo

+0

我有幾個星期前下載的EclipseLink 2.3。根據他們的下載頁面,v2.3似乎是最新的。 – Paul

+0

該配置目前不會給你你正在尋找的輸出。我會盡量把你可以使用的替代方案放在一起。注意:我是EclipseLink JAXB(MOXy)的領導者。 –

回答

1

簡答

這不是在EclipseLink MOXy與@XmlPath目前支持的使用情況。我已經進入了這個以下增強請求,隨意添加附加信息,把票投給了這個bug:

長的答案

莫西將支持映射:

@XmlPath("items/item/@type") 
private ArrayList<String> itemList = new ArrayList<String>(); 

去:

<test> 
    <items> 
    <item type="cookie"/> 
    <item type="crackers"/> 
    </items> 
</test> 

但不是:

@XmlPath("items/item/@type") 
private ArrayList<String> itemList = new ArrayList<String>(); 

@XmlPath("items/item/@brand") 
private ArrayList<String> brandList = new ArrayList<String>(); 

到:

<test> 
    <items> 
    <item type="cookie" brand="oreo"/> 
    <item type="crackers" brand="ritz"/> 
    </items> 
</test> 

解決方法

你可以引入一箇中間目標(Item)來映射這個用例:

@XmlElementWrapper(name="items") 
@XmlElement(name="item") 
private ArrayList<Item> itemList = new ArrayList<Item>(); 

 

public class Item { 

    @XmlAttribute 
    private String type; 

    @XmlAttribute 
    private String brand; 
} 

的更多信息,@XmlPath

+0

非常感謝!你知道一個很好的資源,我可以學習如何以及何時使用'@ XmlAttribute','@ XmlElement'等?如果我不小心將另一個替換爲另一個,或者即使在使用'@ XmlPath'時將其忽略,我也沒有注意到它們之間的區別。 – Paul

+1

@Paul - 不確定我可以指示你的具體資源。如果你使用'@ XmlPath',那麼你不需要使用'@ XmlAttribute'或'@ XmlElement'。也註釋字段或屬性很重要,以下可能會有所幫助:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html。 –

+0

仍然不支持用例嗎?我需要一個java類中的一些xml元素在同一個分組下。我正在使用xpath添加分組標記。但是我怎樣才能在同一個子標籤下帶來多種元素? – Aparna

相關問題