Java Simple-XML Десериализация - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь десериализовать следующий 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>

Кажется, я не могу заставить простой 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, он ищет атрибуты файловых элементов в классе пакета.

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

Ответы [ 2 ]

0 голосов
/ 19 сентября 2014

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

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

....
}
0 голосов
/ 30 марта 2012

Чтобы начать, попробуйте заменить:

public class PackageModel {

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

с этим

public class PackageModel {

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

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

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

...