Сериализация пользовательского объекта в строку XML в Python - PullRequest
0 голосов
/ 04 мая 2018

Это немного странно, но я не нашел полезной информации по такой (казалось) популярной теме, как сериализация XML в Python! Я новичок в Python, так что извините меня за глупый вопрос, если это так. У меня есть класс:

class Purchase:
    @property
    def shortPurchaseDesc(self):
        return self._shortPurchaseDesc

    @shortPurchaseDesc.setter
    def shortPurchaseDesc(self, value):
        self._shortPurchaseDesc = value;

class Result():

    @property
    def resultCode(self):
        return self._resultCode;

    @resultCode.setter
    def resultCode(self, value):
        self._resultCode = value

    _purchase = Purchase()

    @property
    def purchase(self):
        return self._purchase;

    @purchase.setter
    def purchase(self, value):
        self._purchase = value

И я хочу получить строковое представление XML, что-то вроде:

<result>
 <resultCode>2</resultCode>
 <purchase>
  <shortPurchaseDesc>test</shortPurchaseDesc>
 </purchase>
</result>

Я пытался использовать lxml.etree.tostring, но там написано, что Result не может быть сериализовано. Я думаю, что что-то упустил ...

1 Ответ

0 голосов
/ 16 августа 2018

Я сделал простую библиотеку PySXM , которая может вам помочь. Не стесняйтесь меня ударить, если вам нужна дополнительная информация

С PySXM вы бы сделали что-то вроде этого:

from pysxm import ComplexType

class Purchase(ComplexType):

    def __init__(self, desc):
        self.shortPurchaseDesc = desc


class Result(ComplexType):

    def __init__(self, code, desc):
        self.resultCode = code
        self.purchase = Purchase(desc)


In [2]: result = Result('2', 'test')

In [3]: print(result)
<result>
    <purchase>
        <shortPurchaseDesc>test</shortPurchaseDesc>
    </purchase>
    <resultCode>2</resultCode>
</result>

In [4]: result.xml
Out[4]: <Element result at 0x7f07276edb00>

In [5]: result.save('output.xml')

Вуаля.

Можно также использовать DataComplexType .

...