【问题标题】:How to serialize initialized object in Python into XML?如何将Python中的初始化对象序列化为XML?
【发布时间】:2019-10-29 15:33:49
【问题描述】:

我对 python 很陌生。我现在如何在 Java 中编组/解组对象。 我正在寻找类似我们在 Java 中所做的事情。 喜欢:

JAXBContext jaxbContext = JAXBContext.newInstance(com.Request1.class);
                Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setNamespaceAware(true);
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(new InputSource(new StringReader(message)));

                requestStr2 = (com.Request1) unmarshaller.unmarshal(doc);

其中 Request1 有 @XmlRootElement 注释。

我不想写多个元素、子元素等,因为我有非常复杂的 xsd 结构。我想通过generateDS从xsd生成类,然后从数据库初始化并序列化为xml文件

我看到了 pyxser,但它只在 python 2 上。 哪些模块可以帮助我解决这个问题? 谢谢

【问题讨论】:

  • 必须使用 XML 吗?如果没有,那么也许内置的 pickle 模块可以帮助你?
  • @TomDalton,是的,我必须在某些应用程序中......

标签: python xml serialization deserialization python-generateds


【解决方案1】:

generateDS 生成的 python 模块可以从文件或字符串中解析 XML Schema 的 XML 实例。 generateDS 模块支持复杂的 XML Schema,包括复杂类型、抽象类型、枚举列表、混合内容等。

例如,这里是 generateDS 的命令,用于从 people.xsd 生成一个名为 people.py 的 python 模块。

python generateDS.py -o people.py people.xsd

在 Windows 上,有一个 generateDS.exe 包装器,可以作为快捷方式调用:

generateDS.exe -o people.py people.xsd

这是一个符合 people.xsd 架构的示例 XML 实例。

<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <person id="1">
        <name>Alberta</name>
    </person> 
    <person id="2">
        <name>Bernardo</name>
    </person> 
    ...
</people>

以下是python的sn-p,用于解析符合XML Schema的名为people.xml的文件中的上述XML实例。 parse() 函数从文件中解析 XML 文档,并为与元素关联的类创建对象结构。

import people as p
people = p.parse("people.xml", silence=True)
# iterate over each person in the collection
for person in people.get_person():
    print(person.name)

如果要从字符串变量xml 解析,则对其调用 parseString() 函数。

people = p.parseString(xml, silence=True)

请注意,如果 XML 内容包含编码声明,则必须使用字节输入,例如执行以下操作。

people = p.parseString(str.encode(xml), silence=True)

有关从 XML 模式创建 python 模块的详细信息(和更多示例),请参阅tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 2015-05-23
    • 2011-08-13
    • 1970-01-01
    • 2011-12-03
    • 2019-03-04
    • 2018-10-11
    • 2014-07-10
    相关资源
    最近更新 更多