Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Python对象更改为XML?_Python_Xml_Xml Serialization - Fatal编程技术网

如何将Python对象更改为XML?

如何将Python对象更改为XML?,python,xml,xml-serialization,Python,Xml,Xml Serialization,我希望将Python对象转换为XML数据。我尝试过lxml,但最终不得不编写自定义代码将对象保存为xml,这并不完美 我在找更像pyxser的东西。不幸的是,pyxserxml代码看起来与我需要的不同 例如,我有自己的班级成员 Class Person: name = "" age = 0 ids = [] 我想把它转换成xml代码 <Person> <name>Mike</name> <age> 25 &

我希望将Python对象转换为XML数据。我尝试过lxml,但最终不得不编写自定义代码将对象保存为xml,这并不完美

我在找更像pyxser的东西。不幸的是,pyxserxml代码看起来与我需要的不同

例如,我有自己的班级成员

Class Person:
    name = ""
    age = 0
    ids = []
我想把它转换成xml代码

<Person>
    <name>Mike</name>
    <age> 25 </age>
    <ids>
        <id>1234</id>
        <id>333333</id>
        <id>999494</id>
   </ids>
</Person>

迈克
25
1234
333333
999494

我在lxml.objectify中找不到任何接受object并返回xml代码的方法。

Best是一个相当主观的方法,我不确定在不了解更多需求的情况下说什么是最好的方法。但是,建议将Python对象序列化为XML,因此您可能希望从这开始

从Gnosis主页:

Gnosis Utils包含几个用于XML处理的Python模块,以及其他常用工具:

  • xml.pickle(从xml序列化对象)
  • API(与标准pickle模块兼容)
  • objectify(将任意xml文档转换为Python对象)
  • xml.validity(通过DTD或模式强制xml有效性约束)
  • xml.indexer(全文索引/搜索)
  • 还有很多
另一个选择是。

迈克

您可以将对象呈现为XML:

class Person:
  ...
  def toXml( self):
    print '<Person>'
    print '\t<name>...</name>
    ...
    print '</Person>'
班级人员:
...
def toXml(自身):
打印“
打印“\t…”。。。
...
打印“

或者您可以使用XSLT转换Gnosis或pyxser输出。

相关的可能重复:打印等价于XML的文本与序列化为XML不同。然后序列化包含<或<或任何其他XML特殊字符的字段,所有内容都会分离。甚至不要开始走这条路——你永远看不到它的尽头。你能添加一个被序列化的类的例子吗?对于最近的读者来说,gnosis早已过时了。我甚至无法安装它而不弄乱它的
setup.py
,然后它无法解析某些东西,寻找该语言中不再存在的对象属性。@PavelKomarov那么选择的最新库是什么呢?我只想保存和加载一个python对象,不幸的是,我必须使用xml。为什么这么难?我一直在谷歌上搜索,似乎没有一个“3行或更少”的解决方案。我最终编写了自己的递归解决方案,利用Python的反射来遍历对象结构。