Python 序列化数据为XML

Python 序列化数据为XML格式,下面介绍一个使用Python内置的库进行XML序列化的方法,这将从单独的标签构建出一个文档。一种常用的替代方法是使用Python的自省特性来进行检查并将Python对象和类名映射为XML标记和属性。

XML序列化过程如下:

import xml.etree.ElementTree as XML

def serialize_xml(series: str, data: List[Pair]) -> bytes:
    """
    >>> data = [Pair(2,3), Pair(5,7)]
    >>> serialize_xml( "test", data )
    b'<series
    name="test"><row><x>2</x><y>3</y></row><row><x>5</x><y>7</y></row></series>'
    """
    doc = XML.Element("series", name=series)
    for row in data:
        row_xml = XML.SubElement(doc, "row")
        x = XML.SubElement(row_xml, "x")
        x.text = str(row.x)
        y = XML.SubElement(row_xml, "y")
        y.text = str(row.y)
    return cast(bytes, XML.tostring(doc, encoding='utf-8'))

这样就创建了一个顶层元素<series>,并将子元素<row>放在它的下面。在每一个子元素<row>内创建了<x>标签和<y>标签,并将文本内容赋给了各个标签。

使用ElementTree库作为构建XML文档的接口往往是命令式的,因此它不适合函数式设计。除了命令式做法外,请注意并没有创建DTD(documnet type definition,文档类型定义)或XSD(XML schemas definition,XML模式定义),也尚未为标签分配合适的命名空间,同时省略了<?xml version="1.0"?>处理指令,而通常它会作为XML文档的第一项。

函数XML.tostring()有一个类型提示用于声明返回的是str。这样做通常是正确的,但当提供的是encoding参数时,结果的类型会变为bytes。并没有简单的方法来根据参数的值判断返回值的类型,因此使用显式的cast()将实际类型告知mypy

更高级的序列化库可能会有所帮助,访问https://wiki.python.org/moin/PythonXml查看更多选择。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程