Десериализация Java Simple-XML

Я пытаюсь десериализовать следующий XML:

<jdownloader>
    <package
        package_eta="~"
        package_linksinprogress="0"
        package_linkstotal="5"
        package_loaded="0 B"
        package_name="Unchecked"
        package_percent="0.00"
        package_size="0 B"
        package_speed="0 B"
        package_todo="0 B" >

        <file
            file_hoster="hoster_name"
            file_name="name"
            file_package="Unchecked"
            file_percent="0.09"
            file_speed="0"
            file_status="[Aborted] " >

            <file
                file_hoster="hoster_name"
                file_name="name"
                file_package="Unchecked"
                file_percent="0.03"
                file_speed="0"
                file_status="[Aborted] " >

                <file
                    file_hoster="hoster_name"
                    file_name="name"
                    file_package="Unchecked"
                    file_percent="0.05"
                    file_speed="0"
                    file_status="[Aborted] " >
                </file>
            </file>
        </file>
    </package>
</jdownloader>

Кажется, я не могу заставить simple-xml десериализовать это так, как я хочу.

Мне нужно получить объект для пакета (будет несколько пакетов в каждом xml) и список файловых объектов как дочерний объект пакета. XML нельзя изменить, и кажется, что каждый элемент файла вложен в предыдущий элемент файла, а не все в родительский пакет.

Код, который у меня есть для этого до сих пор:

@Root(name = "jdownloader")
public class DownloadsModel {

    @ElementList(name="package")
    public List<PackageModel> Package;

}


@Root(name = "package")
public class PackageModel {

    @ElementList(name="file")
    public List<FileModel> file;

    @Attribute
    public String package_eta;

    @Attribute
    public String package_linksinprogress;

    @Attribute
    public String package_linkstotal;

    @Attribute
    public String package_loaded;

    @Attribute
    public String package_name;

    @Attribute
    public String package_percent;

    @Attribute
    public String package_size;

    @Attribute
    public String package_speed;

    @Attribute
    public String package_todo;

}

@Root(name = "file")
public class FileModel {

    @Attribute
    public String file_hoster;

    @Attribute
    public String file_name;

    @Attribute
    public String file_package;

    @Attribute
    public String file_percent;

    @Attribute
    public String file_speed;

    @Attribute
    public String file_status;

}

Когда Simple-XML пытается десериализовать xml, он ищет атрибуты файловых элементов в классе пакета.

Кто-нибудь может мне помочь?


person athor    schedule 30.03.2012    source источник


Ответы (2)


Для начала попробуйте заменить:

public class PackageModel {

         @ElementList(name="file")
         public List<FileModel> file;

с этим

public class PackageModel {

         @ElementList(name="file", inline=true)
         public List<FileModel> file;

Затем вы можете избавиться от нескольких определений FileModel.

Подробнее здесь.

person curioustechizen    schedule 30.03.2012

Ваша модель похожа на

@Root(name = "package")
public class DownloadsModel {

    @ElementList(name = "package", inline = true)
    public List<PackageModel> Package;
}

Упаковка:

@Root(name = "package")
public class PackageModel {

    @ElementList(name = "file", inline = true)
    public List<FileModel> file;
    ....
}

и для файла (XML нельзя изменить, и кажется, что каждый элемент файла вложен в предыдущий элемент файла, а не все в родительский пакет)

@Root(name = "file")
public class FileModel {

@ElementList(name = "file", inline = true, required = false)
public List<FileModel> file;

@Attribute
public String file_hoster;

....
}
person Bunyod    schedule 19.09.2014