android parse xml файл с несколькими элементами через Джексона - PullRequest
1 голос
/ 27 апреля 2020

У меня есть файл xml, подобный следующему:

<TABLES>
<TABLE NAME="abcd" TIME="2013.05.27 00:00:00" >
<LINES>
<LINE TIME="2013.05.27 00:00:00" BEGINE="787465" END="787465"/>
</LINES>
<SPECIAL>
<DAY MASK="128" DATE="16714778" />
<WEEK NAME="abcde" PARAM="128" />
</SPECIAL> 
</TABLE>
</TABLES>

Проблема в том, что в SPECIAL есть 2 типа элементов DAY и WEEK. Я не могу разобрать это через Джексона, есть ли особый способ справиться с этим? Я могу разобрать все остальное через POJO без каких-либо проблем, но для особых мне нужно настроить 2 разных класса

// DAY
class SPECIAL(
    @JacksonXmlProperty(localName = "MASK")
    val mask: String,

    @JacksonXmlProperty(localName = "DATE")
    val date: Int,
)

// WEEK
class SPECIAL(
    @JacksonXmlProperty(localName = "NAME")
    val name: String,

    @JacksonXmlProperty(localName = "PARAM")
    val param: Int,
)

1 Ответ

0 голосов
/ 29 апреля 2020

Special имеет два разных тега DAY и Week, поэтому вы можете разделить их на два класса POJO как

data class DAY(@JacksonXmlProperty(localName = "Date") val date: String, @JacksonXmlProperty(localName = "MASK")val mask: String)

data class WEEK(@JacksonXmlProperty(localName = "PARAM") val param: String,@JacksonXmlProperty(localName = "Name") val name: String)

и использовать их в классе SPECIAL как:

data class SPECIAL(@JacksonXmlProperty(localName = "WEEK") val week: WEEK, @JacksonXmlProperty(localName = "DAY") val day: DAY)



Чтобы сделать поле SPECIAL необязательным, пометьте это поле как обнуляемое в вашем классе TABLE, используя ? как:

data class TABLE(
    @JacksonXmlProperty(localName = "SPECIAL") val special: SPECIAL?,
    @JacksonXmlProperty(localName = "NAME") val name: String,
    @JacksonXmlProperty(localName = "TIME") val time: String
)

и SPECIAL class as

data class SPECIAL(
    @JacksonXmlProperty(localName = "WEEK") var week: WEEK?,
    @JacksonXmlProperty(localName = "DAY") var day: DAY?
)

Просмотреть полный исходный код

...