热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java读取xml_两行代码,实现xml转dict,dict转object

近期使用Python对接微信开放平台,发现微信开放平台发送通知事件基本都是用xml格式的,如授权结果通知创建小程序结果通知消息通知事件通知在解析这些xm
d4c30f294e3c77e16aadccb1013a6d8e.png

近期使用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 = """159653463401
"""# 定义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)

运行结果

571ef711c13e581612bdde6bcdb09aa9.png

可以看到读取和转化非常方便,在读取某个字段的时可以充分利用IDE的联想功能,编码出错的概率大幅下降。


关注我的公众号 牛仔说,第一时间接收到我们更新文章。



推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
author-avatar
爱情丫丫2502895047
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有