【问题标题】:XML library similar to simplejson/json? - Python类似于 simplejson/json 的 XML 库? - Python
【发布时间】:2011-03-01 02:44:26
【问题描述】:

是否有与 simplejson 类似的库,可以快速序列化与 XML 之间的数据。

e.g. json.loads('{vol:'III', title:'Magical Unicorn'}')

e.g. json.dumps([1,2,3,4,5])

有什么想法吗?

【问题讨论】:

    标签: python xml json simplejson


    【解决方案1】:

    对于 xml,您不会发现任何与 json 一样一致的东西,因为 xml 不知道数据类型。这取决于您是否遵循约定或强制遵守 xml 模式文件。

    话虽如此,如果您愿意接受 XML-RPC 数据结构映射和一些限制,请查看 Python 标准库中的 xmlrpclib 包:

    http://docs.python.org/library/xmlrpclib.html#convenience-functions

    >>> import xmlrpclib
    >>> s = xmlrpclib.dumps( ({'vol':'III', 'title':'Magical Unicorn'},))
    >>> print s
    <params>
    <param>
    <value><struct>
    <member>
    <name>vol</name>
    <value><string>III</string></value>
    </member>
    <member>
    <name>title</name>
    <value><string>Magical Unicorn</string></value>
    </member>
    </struct></value>
    </param>
    </params>
    
    >>> xmlrpclib.loads(s)[0]
    ({'vol': 'III', 'title': 'Magical Unicorn'},)
    >>> 
    

    【讨论】:

    • 特别是,xmlrpc 格式与 json 相比有一些限制......只有 dict 键的字符串。没有,布尔值。 (如果我错了,请纠正我!)
    • 更正:你错了。 :) 字典键也必须是 json 中的字符串。 xmlrpclib 支持布尔值,如果将 allow_none=True 参数传递给转储,则为 None。
    【解决方案2】:

    您可以查看他们在 Django 中是如何做到的:xml_serializer.py 并根据您的需要进行调整。

    【讨论】:

      【解决方案3】:

      我不知道有一个。除非xmlrpc 计数... 如果您正在考虑自行开发:与大多数其他 XML 库相比,使用 ElementTree 做任何事情都是一种乐趣。

      但是,由于您最终可能会得到一个非标准化的表示,因此您需要控制双方,对吧? 那为什么不直接选择jsonpickle 或者已经存在的东西呢?

      如果你想使用 xmlrpclib 模块:

      xmlrpclib.dumps(data)
      

      Forest 提到了 xmlrpclib 中的限制,这是一个很好的观点。我自己见过的一些:整数不能超过 2^31-1,否则图书馆会抱怨。 “无”值通常不好,但您可以绕过它。 可能还有其他限制。

      除此之外,xmlrpc 协议非常冗长。如果您需要担心发送了多少数据,这不是最好的。但是没有任何 XML 版本会非常有效。

      【讨论】:

        【解决方案4】:

        xml 不像 json 那样直接,因为 xml 和 python 的数据类型之间没有“类型映射”。哎呀,XML 数据可以是任何东西,就像在相应的 XSL 中映射的那样。

        至于你最关心的API,我推荐Element Tree

        关于使用元素树解析 XML 的好教程,我推荐你 Mark Pilgrim's Dive into Python3

        【讨论】:

          【解决方案5】:

          lxml 呢?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-21
            • 1970-01-01
            • 1970-01-01
            • 2019-06-04
            • 1970-01-01
            • 1970-01-01
            • 2011-01-02
            • 2019-07-22
            相关资源
            最近更新 更多