2014-02-11 2 views
0

Я пытаюсь создать отчет XML, который можно открыть как таблицу xls. я следующий вывод:Xstream - изменить имя элемента ArrayList

<Report> 
    <test> 
    <string>4.419</string> 
    <string>4.256</string> 
    </test> 
</Report> 

из этого кода:

/** 
* declare arrays 
*/ 
// ArrayList<String> test = new ArrayList<String>(); 
ArrayList<String> stats = new ArrayList<String>(); 
// ArrayList<String> count = new ArrayList<String>(); 

/** 
*return array list with loading times 
*/ 
public ArrayList launch() { 

    for (int i = 0; i < 2; i++) { 

    //  ui.off(); 
    //  ui.on(); 
    device.pressHome(); 
    ui.openProgramInMenu("ON"); 

    long TStart = System.currentTimeMillis(); 
    ui.detectContactList(); 
    long TStop = System.currentTimeMillis(); 
    float res = TStop - TStart; 
    res /= 1000; 
    ui.log("[loading time]: " + res); 
    //  ui.off(); 

    test.add(i, "Loading time"); 
    stats.add(i, Float.toString(res)); 
    count.add(i, Integer.toString(i)); 
    } 
    System.out.println(stats); 
} 

где rep.class имеет код:

public class ReportSettings { 

    public List<String> test = new ArrayList<String>(); 
    public List<String> count = new ArrayList<String>(); 
    public List<String> stats = new ArrayList<String>(); 

     /** 
     * Test method 
     */ 
    public static void main(String[] args) { 
     ReportSettings rep = new ReportSettings(); 
     rep.saveXML("report/data.xml"); 
     //  System.out.println(rep.test); 
     //  rep = rep.loadXML("report/data.xml"); 
     //  System.out.println(rep.home); 

     System.out.println(rep.getXML()); 
    } 

    public void createReport() { 
     ReportSettings rep = new ReportSettings(); 
     rep.saveXML("report/data.xml"); 
    } 

    public String getXML() { 
     XStream xstream = new XStream(); 
     xstream.alias("Report", ReportSettings.class); 
     xstream.autodetectAnnotations(true); 
     return xstream.toXML(this); 
    } 

    public void saveXML(String filename) { 
     if (!filename.contains(".xml")) { 
      System.out.println("Error in saveReport syntax"); 
      return; 
     } 
     String xml = this.getXML(); 
     File f = new File(filename); 
     try { 

      FileOutputStream fo = new FileOutputStream(f); 
      fo.write(xml.getBytes()); 
      fo.close(); 
     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public ReportSettings loadXML(String filename) { 
     if (!filename.endsWith(".xml")) { 
      System.out.println("Error in loadReport syntax!"); 
      throw new RuntimeException("Error in loadReport syntax!"); 
     } 
     File f = new File(filename); 
     XStream xstream = new XStream(new DomDriver()); 
     xstream.alias("Report", ReportSettings.class); 
     xstream.autodetectAnnotations(true); 
     ReportSettings ort = (ReportSettings)xstream.fromXML(f); 
     return ort; 
    } 
} 

Наконец, я хочу, чтобы создать таблицу из 3 ArrayList, где { статистика, счет, тест} * i./n Как использовать Xstream.alias для изменения <strings> в <somethingAnother> в XML-файле? Мне нужно изменить их на stringOne и stringTwo в качестве примера.

ответ

0

Вы можете использовать ClassAliasMapper в Xstream, чтобы при создании сериализации в XML элементы в вашей коллекции имели другой тег.

Вы добавляете блок, как это (для каждой коллекции: статистика, количество, тест):

ClassAliasingMapper statsMapper = new ClassAliasingMapper(xstream.getMapper()); 
mapper.addClassAlias("somethingAnother", String.class); 
xstream.registerLocalConverter(
    InteractionSession.class, 
    "stats", 
    new CollectionConverter(mapper) 
    ); 
Смежные вопросы