2010-10-14 22 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>()