2015-06-10 2 views
1

Учитывая следующий код XML:Могу ли я объединить одно свойство xml в многоэлементный массив?

<root> 
    <vector>{1, 2, 3, 4, 5}</vector> 
</root> 

Можно ли распаковать элемент <vector> в массиве 5 элементов, таким образом, что:

array = {1, 2, 3, 4, 5} 

В моей попытке сделать это, я написал код , но он не может правильно разделить <vector> в массив, где каждое число представляет собой отдельный элемент:

@XmlType(propOrder = {"vector"}) 
@XmlRootElement(name = "root") 
public class Data 
{ 
    // class data 
    private int[] vector; 

    @XmlElement(name = "vector") 
    public void setVector(int[] vector) 
    { 
    this.vector = vector; 
    } 

    public int[] getVector() 
    { 
    return vector; 
    } 
} 

ответ

2

Вам нужен XMLAdapter, что-то вроде этого:

public class VectorAdapter extends XmlAdapter<String, int[]> { 

    @Override 
    public int[] unmarshal(final String v) throws Exception { 
     final String[] strs = v.substring(1, v.length() - 1).split(","); 
     final int[] vector = new int[strs.length]; 
     for (int i = 0; i < strs.length; i++) { 
      vector[i] = Integer.parseInt(strs[i].trim()); 
     } 
     return vector; 
    } 

    @Override 
    public String marshal(final int[] v) throws Exception { 
     return null; 
    } 
} 

Затем аннотировать ваш элемент с @XmlJavaTypeAdapter:

@XmlJavaTypeAdapter(VectorAdapter.class) 
@XmlElement(name = "vector") 
public void setVector(final int[] vector) { 
    this.vector = vector; 
} 
+0

Спасибо, что сделал именно то, что я хотел :) – 5had3sofQu4rtz

Смежные вопросы