将 Python 对象转换为不带命名空间的 XML

问题描述 投票:0回答:1

我正在使用 xsdata 中的 XmlSerializer 将 python3.9 数据类对象转换为 XML。

这是代码

# create serializer
XML_SERIALIZER = XmlSerializer(config=SerializerConfig(xml_declaration=False))

# initialize class with multiple properties
my_obj = MyDataClass(prop1='some val', prop2='some val' , , ,)    

# serialize object
serialized_value = XML_SERIALIZER.render(my_obj)

这会生成对象的 xml 表示形式,但在 xml 中包含我不想要的内容,例如 xmlns... xsi:type

 <SomeProperty xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="SomeTypePropetryInMyDataClass">
  <code>
   XYZ
  </code>
 </SomeProperty>

我也尝试过这样的渲染

XML_SERIALIZER.render(my_obj, ns_map=None)
,但这也不起作用。

有谁知道如何在不添加命名空间和类型信息的情况下渲染它? python 是否有另一种更灵活的 XML 序列化器/反序列化器?

python xml serialization deserialization xml-deserialization
1个回答
0
投票
import xml.etree.ElementTree as ET

class MyDataClass:
    def __init__(self, prop1, prop2):
        self.prop1 = prop1
        self.prop2 = prop2

my_obj = MyDataClass('some val', 'some val')

root = ET.Element('Root')

child1 = ET.SubElement(root, 'Property1')
child1.text = my_obj.prop1

child2 = ET.SubElement(root, 'Property2')
child2.text = my_obj.prop2

tree = ET.ElementTree(root)
tree.write('output.xml')

这将生成一个简单的 XML 文件,没有任何命名空间或类型属性。

每个库都有其优点和缺点,因此最佳选择取决于您的具体要求。

© www.soinside.com 2019 - 2024. All rights reserved.