Java SimpleXml.Как разобрать XML, который содержит XML-кодировку Base64? - PullRequest
0 голосов
/ 09 октября 2018

Я пишу приложение для Android, которое извлекает данные XML с сервера.Для манипулирования такими данными я использую Retrofit-SimpleXmlConverter (http://simple.sourceforge.net/home.php, https://github.com/square/retrofit/tree/master/retrofit-converters/simplexml) конвейер. Мне нужно получить этот список транзакций:

<?xml version="1.0"?>
<Transactions>
<Transaction>
    <Transaction_Time>12-01-2018</Transaction_Time>
    <Transaction_Bonuses>123.11</Transaction_Bonuses>
    <Summ>123.11</Summ>
    <Transaction_Type>12</Transaction_Type>
    <Dop_Info>BLOB Base64 data with cyrillic symbols</Dop_Info>
</Transaction>
<Transaction>
    <Transaction_Time>12-01-2018</Transaction_Time>
    <Transaction_Bonuses>123.11</Transaction_Bonuses>
    <Summ>123.11</Summ>
    <Transaction_Type>12</Transaction_Type>
    <Dop_Info>no/Dop_Info>
</Transaction>

Моя проблемав том, что xml имеет тег с XML-кодом в кодировке BASE-64. Из кодированного XML-файла мне нужны следующие данные:

<CHECK>
<LINE name="Name of dish", quantity="1", summ="123,5"></LINE>
<LINE name="Name of dish", quantity="1", summ="123,5"></LINE>
<LINE name="Name of dish", quantity="1", summ="123,5"></LINE>
</CHECK>

Классы данных:

@Root(name = "Transactions")
data class Transactions @JvmOverloads constructor(
    @field:ElementList(inline = true, required = false)
    @param:ElementList(inline = true, required = false)
    val list: List<Transaction>? = null
) {

@Root(name = "Transaction")
data class Transaction @JvmOverloads constructor(
        @field:Element(name = "Transaction_Time")
        @param:Element(name = "Transaction_Time")
        var transactionTime: String? = null,

        @field:Element(name = "Transaction_Bonuses")
        @param:Element(name = "Transaction_Bonuses")
        val transactionBonuses: Double? = 0.0,

        @field:Element(name = "Summ")
        @param:Element(name = "Summ")
        val summ: Double? = 0.0,

        @field:Element(name = "Transaction_Type")
        @param:Element(name = "Transaction_Type")
        val transactionType: Int? = 0,

        @field:Element(name = "Dop_Info")
        @param:Element(name = "Dop_Info")
        val dopInfo: ByteArray ? = null
 ){
        @Root(name = "CHECK")
        data class Check @JvmOverloads constructor(
                @field:ElementList(inline = true, required = false)
                @param:ElementList(inline = true, required = false)
                @field:Path("CHECKDATA/CHECKLINES")
                @param:Path("Holders_Cards/Holder_Card/Card")
                val list: List<Line>? = null
        ){
                @Root(name = "LINE")
                data class Line @JvmOverloads constructor(
                        @field: Attribute(name = "name", required = false)
                        @param: Attribute(name = "name", required = false)
                        val name: String? = null,

                        @field: Attribute(name = "quantity", required=false)
                        @param: Attribute(name = "quantity", required=false)
                        val quantity: Int? = null,

                        @field: Attribute(name = "summ", required = false)
                        @param: Attribute(name = "summ", required = false)
                        val summ: Double? = null
                )
        }
}
}

На данный момент я запутался - какмогу ли я правильно сериализовать xml так, как я мог бы получить вместо модели проверки blob-data? Какие дальнейшие шаги?

PS Для решения я попытался использовать руководство из http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#callback, но это не помоглоничего полезного

...