我正在使用 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 序列化器/反序列化器?
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 文件,没有任何命名空间或类型属性。
每个库都有其优点和缺点,因此最佳选择取决于您的具体要求。