近期使用Python对接微信开放平台,发现微信开放平台发送通知事件基本都是用xml格式的,如
在解析这些xml之前思考了一下,如何才能像java一样将xml直接转换为object,方便内容解析和程序判断。
经过研究发现通过两个组件就可以非常优雅的实现这个目标。
- pydantic, 因为我现在用FastAPI框架开发api服务,本身就已经大量使用了pydantic来实现json、dict和model的转化。在类型转化和字段校验方面非常强大,用起来非常顺手。项目首页:https://pydantic-docs.helpmanual.io/
- simplexml,今天发现的一个非常轻量的xml读取和生成工具。项目首页:https://github.com/marcelnicolay/simplexml
两个工具结合之后,样例代码如下:
from pydantic import BaseModel
import simplexml# 需要解析的xml内容
xml = """15965346340
1
"""# 定义Object对象
class CreateMiniProgramInfoNode(BaseModel):name: strcode: strcode_type: strlegal_persona_wechat: strlegal_persona_name: strcomponent_phone: str# 定义Object对象
class CreateMiniProgramNotifyRequest(BaseModel):AppId: strCreateTime: intInfoType: strappid: strstatus: strauth_code: strmsg: strinfo: CreateMiniProgramInfoNode# 读取xml,生成dict
data = simplexml.loads(xml)
print('xml -> dict:', data)# 通过dict 生成notify对象
notify = CreateMiniProgramNotifyRequest(**data['xml'])
# 生成json
print('dict -> object:', notify.json())# 读取notify对象的重点信息
print('object.info.code:', notify.info.code)
print('object.info.name:', notify.info.name)
运行结果
可以看到读取和转化非常方便,在读取某个字段的时可以充分利用IDE的联想功能,编码出错的概率大幅下降。
关注我的公众号 牛仔说,第一时间接收到我们更新文章。