Parsing XML file list elements with Simple XML in Android

android, java, jaxb, simple-framework, xml

Solution

You best write 3 classes:

- A `House` class, (= the root) containing a (inline-) list of `MainLevel`

- A `MainLevel` class, containing a (inline-) list of all `ChildLevel`

- A `ChildLevel` class, containing the value

Here's some pseudocode:

@Root(...)
public class House
{
    @ElementList(inline = true, ...)
    private List<MainLevel> levels;

    // ...
}

public class MainLevel
{
    @Attribute(name = "Name")
    private String name;
    @Attribute(name = "IsHidden")
    private bool hidden;
    @ElementList(inline = true, ...)
    private List<ChildLevel> childLevels;

    // ...
}

public class ChildLevel
{
    @Attribute(name = "Name")
    private String name;
    @Attribute(name = "Category", required = false)
    private String category;

    // ...
}

Since a `ChildLevel` can have different types, you have to take care about this. Either implement all types and mark them as not required, or make subclasses.

Problem

I need to parse a large xml file with SImple XML, (I really want to use Simple XML). I created objects with XSD, converted them from JAXB specific to SimpleXML specific adnotated objects. The XML looks like this: ``` <House> <MainLevel Name="~#editRoom" IsHidden="false"> <ChildLevel Name="Television" Category="Livingroom"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="Chair" Category="Livingroom"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="Table"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="ChamberName" Category="Livingroom"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="ChamberName" Category="Bathroom"> <string>BathTub</string> </ChildLevel> <ChildLevel Name="Door", Category="DiningRoom"> <boolean>isOpen</boolean> </ChildLevel> </MainLevel> <MainLevel Name="~#editRoom" IsHidden="false"> <ChildLevel Name="Television" Category="Livingroom"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="Chair" Category="Livingroom"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="Table" Category="Livingroom"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="ChamberName" Category="Livingroom"> <string>TestRoom</string> </ChildLevel> <ChildLevel Name="ChamberName" Category="Bathroom"> <string>BathTub</string> </ChildLevel> <ChildLevel Name="Door"> <boolean>isOpen</boolean> </ChildLevel> </MainLevel> </House> ``` What are your suggestions. Please help.Thx.

Original source