Question

I'm trying to create XML report, that can be opened as xls table. I have following output:

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

from this code:

/**
* 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);
}

where rep.class has code:

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;
    }
}

Finally I want to create table from 3 ArrayList, where {stats, count, test}*i. /n How can I use Xstream.alias to change <strings> to <somethingAnother> in the XML file? I need to change them to stringOne and stringTwo as example.

Was it helpful?

Solution

You can use the ClassAliasMapper in Xstream to give the items in your collection a different tag when serializing to XML.

You add a block like this (for each collection: stats, count, test):

ClassAliasingMapper statsMapper = new ClassAliasingMapper(xstream.getMapper());
mapper.addClassAlias("somethingAnother", String.class);
xstream.registerLocalConverter(
    InteractionSession.class,
    "stats",
    new CollectionConverter(mapper)
    );
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top