2010-10-14 47 views
4

我有類似JAXB可以輸出ArrayList作爲逗號分隔值嗎?

@XmlElementWrapper(name="Mylist") 
List<Items> myItems = new ArrayList<Items>() 

和出來像

<Mylist> 
    <myItems>item 1</myItems> 
    <myItems>item 2</myItems> 
    <myItems>item 3</myItems> 
</Mylist> 

是否有可能使這個出來更像

<Mylist> 
    <myItems>item 1, item 2, item 3</myItems> 
</Mylist> 

由於我之後的數據是所有隻是文本呢?

回答

5

您可以使用@XmlList使其成爲空格分隔值。

對於用逗號分隔的列表,您需要使用XmlAdapter。有關XmlAdapter更多信息,請參閱:

+0

是你在新的適配器類中說,然後我會簡單地說將列表中的所有項目都放在一起,並在新創建的字符串上使用@XmlValue? – Derek 2010-10-14 19:56:51

+0

是的,然後沿着另一個方向,可以標記','字符上的字符串。 – 2010-10-14 20:40:00

2

下面是一個XmlAdapter處理逗號分隔的列表:

import java.util.ArrayList; 
import java.util.List; 

import javax.xml.bind.annotation.adapters.XmlAdapter; 

public class CommaSeparatedListAdapter extends XmlAdapter<String, List<String>> { 

    @Override 
    public List<String> unmarshal(final String string) { 
     final List<String> strings = new ArrayList<String>(); 

     for (final String s : string.split(",")) { 
      final String trimmed = s.trim(); 

      if (trimmed.length() > 0) { 
       strings.add(trimmed); 
      } 
     } 

     return strings; 
    } 

    @Override 
    public String marshal(final List<String> strings) { 
     final StringBuilder sb = new StringBuilder(); 

     for (final String string : strings) { 
      if (sb.length() > 0) { 
       sb.append(", "); 
      } 

      sb.append(string); 
     } 

     return sb.toString(); 
    } 
} 

你會使用這樣的:

@XmlElementWrapper(name="Mylist") 
@XmlJavaTypeAdapter(CommaSeparatedListAdapter.class) 
List<Items> myItems = new ArrayList<Items>()