2015-01-28 5 views
1

Я хочу преобразовать объект в xml, где ему требуется указать псевдоним для типа данных String. Например:Как псевдоним типа данных с помощью XStream?

public class ArrayTest 
{ 
    private int id=4; 
    public String area[]; 
    public void setArea(String ar[]) 
    { 
    area = ar; 
    } 
} 

объекта в класс XML-преобразования, как:

public class Test 
{ 
    public static void main(String args[]) 
    { 
     String area[] = {"ABC","XYZ","PRQ"}; 
     ArrayTest at = new ArrayTest(); 
     at.setArea(area); 
     Xstream stream = new XStream(new staxDriver()); 
     stream.alias("response",ArrayTest.class); 
     System.out.println(stream.toXML(at)); 
    } 
} 

Я получаю выход как:

<?xml version="1.0" ?> 
<response> 
    <id>4</id> 
    <area> 
    <string>ABC</string> 
    <string>XYZ</string> 
    <string>PRQ</string> 
    </area> 
</response> 

Но я хочу -Выход как:

<?xml version="1.0" ?> 
<response> 
    <id>4</id> 
    <area> 
    <code>ABC</code> 
    <code>XYZ</code> 
    <code>PRQ</code> 
    </area> 
</response> 

Я новичок в XStream, любезно помогите мне из

+0

Я думаю '@XStreamImplicit (itemFieldName = "код")' над 'области общественного String [];' является то, что вы ищете: HTTP: //xstream.codehaus. org/annotations-tutorial.html # ImplicitCollections – Albert

+0

@Albert: Я тоже пытался это сделать, но вывод не является тем, что я ожидаю ... – Samraan

+0

Попробуйте программно, как говорит @jjlema. – Albert

ответ

1

Я думаю, что это может работать:

Сначала добавьте поглотитель для area

public class ArrayTest { 
    private int id = 4; 
    private String[] area; 

    public void setArea(String ar[]) { 
     area = ar; 
    } 

    public String[] getArea() { 
     return area; 
    } 
} 

Затем добавьте NamedArrayConverter конвертер:

public static void main(String args[]) { 
    String area[] = { "ABC", "XYZ", "PRQ" }; 
    ArrayTest at = new ArrayTest(); 
    at.setArea(area); 
    XStream stream = new XStream(); 
    stream.alias("response",ArrayTest.class); 
    stream.registerConverter(new NamedArrayConverter(at.getArea().getClass(), null, "code")); 
    System.out.println(stream.toXML(at)); 
} 

Это выход:

<response> 
    <id>4</id> 
    <area> 
    <code>ABC</code> 
    <code>XYZ</code> 
    <code>PRQ</code> 
    </area> 
</response> 
1

Вы можете использовать:

stream.addImplicitArray(ArrayTest.class, "area", "code"); 
+0

Я тоже пробовал, но вывод не то, что я ожидаю. Выход будет ' 4ABCXYZPRQ' Здесь тег отсутствует, но я хочу, что слишком – Samraan