【问题标题】:Serialize custom object to XML string in Python在 Python 中将自定义对象序列化为 XML 字符串
【发布时间】:2018-05-04 12:21:20
【问题描述】:

这有点奇怪,但我没有找到任何有用的信息,关于像 Python 中的 XML 序列化这样的(似乎)流行的话题!我是 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 无法序列化。我想我错过了什么......

【问题讨论】:

  • 您必须定义序列化 xml 中的内容的方法(每个类一个)。
  • @CristiFati 我来自 .NET,我们在那里有 Serializable 属性,用于将类标记为可序列化。希望这里也有一些简单的方法,历史上 XML 序列化在 JSON 之前非常流行。我必须定义什么样的函数?
  • 我不知道这样的模块(尽管它很有可能存在)。你必须做一个方法来序列化一个实例的状态。

标签: python xml serialization


【解决方案1】:

我制作了一个简单的库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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多