圆月山庄资源网 Design By www.vgjia.com
使用了Python的 xml.etree.ElementTree 库
xml.etree.ElementTree 库简介
xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。xml.etree.ElementTree模块对于恶意构造的数据是不安全的。如果您需要解析不受信任或未经验证的数据,请参阅XML漏洞。
参考文献:https://docs.python.org/3.6/library/xml.etree.elementtree.html
from xml.etree import ElementTree import json LISTTYPE = 1 DICTTYPE = 0 def getDictResults(res_dicts, iters): result_dicts = {} for iter in iters.getchildren(): iterxml(iter, result_dicts) if result_dicts: res_dicts[iters.tag].update(result_dicts) def getListResults(res_dicts, iters): result_lists = [] for iter in iters.getchildren(): result_dicts = {} iterxml(iter, result_dicts) result_lists.append(result_dicts.copy()) del(result_dicts) if result_lists: if len(res_dicts[iters.tag].items()) == 0: res_dicts[iters.tag] = result_lists.copy() else: for resobj in result_lists: resobjkey = list(resobj.keys())[0] if res_dicts[iters.tag].get(resobjkey) == None: res_dicts[iters.tag].update(resobj) else: if type(res_dicts[iters.tag][resobjkey]) == list: res_dicts[iters.tag][resobjkey].append(resobj[resobjkey].copy()) else: old_value = res_dicts[iters.tag][resobjkey] res_dicts[iters.tag][resobjkey] = [] res_dicts[iters.tag][resobjkey].append(old_value) res_dicts[iters.tag][resobjkey].append(resobj[resobjkey].copy()) del(result_lists) def checkxmlchildrentype(iters): taglist = [] for iter in iters.getchildren(): taglist.append(iter.tag) if len(set(taglist)) == len(taglist): return DICTTYPE else: return LISTTYPE def getResults(res_dicts, iters): if checkxmlchildrentype(iters): return getListResults(res_dicts, iters) else: return getDictResults(res_dicts, iters) #@res_dicts {} def iterxml(iter, res_dicts): res_dicts[iter.tag] = {} if iter.attrib: for k,v in dict(iter.attrib).items(): res_dicts[iter.tag].update({k : v}) if iter.text is not None and iter.text.strip() != "": res_dicts[iter.tag].update({"__XmlTagText__" : iter.text.strip()}) if iter.getchildren(): getResults(res_dicts, iter) def parserxmltojson(file_path): try: tree = ElementTree.parse(file_path) except Exception as e: #multi-byte encodings are not supported 把字符集改成utf-8就可以 #encoding specified in XML declaration is incorrect xml encoding标识和文件的字符集不同 #syntax error 语法错误,乱码等 #not well-formed (invalid token) 编辑器点击后字符集被修改成ASCII等,或者文件本身字符集和xml encoding不相同 print("Parser {} Error, Errmsg: {}".format(file_path, e)) return "" if tree is None: print("{} is None.".format(file_path)) return "" root = tree.getroot() report = {} iterxml(root, report) #return getDictResults(root) return report if __name__ == "__main__": jsonret = parserxmltojson("test.xml") with open("test.json", "w", encoding="utf-8") as fd: fd.write(json.dumps(jsonret, ensure_ascii=False, indent=4)) print(json.dumps(jsonret, ensure_ascii=False, indent=4))
以上就是python实现xml转json文件的示例代码的详细内容,更多关于python实现xml转json文件的资料请关注其它相关文章!
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
更新日志
2024年11月01日
2024年11月01日
- 群星《戏梦》[FLAC/分轨][308.4MB]
- 魔兽世界永久60级什么时间开 永久60级开启时间介绍
- 魔兽世界奥卡兹岛血藻刷新点一览 wlk奥卡兹岛血藻刷新位置介绍
- 英雄联盟s14中国队种子怎么排名 s14中国队种子队伍排名一览
- 柏菲·梁玉嵘《知音梁品》限量开盘母带ORMCD[低速原抓WAV+CUE]
- [东升唱片]孙露《寂寞诱惑AQCD》高码率[FLAC]
- 群星-第8届2012十大发烧唱片精选HQ2CD[WAV+CUE]
- 九号公司两轮电动安全季行动圆满收官:为行业树立安全管理新标杆
- 创新驱动未来 中国移动5G云游戏深化智能运维应用推动行业发展
- 大型手游“帧数拉满” 骁龙8至尊版游戏表现强悍
- 谢金燕.2002-YOYO姊妹【华特】【WAV+CUE】
- 群星.1994-摇滚列车【音乐家】【WAV+CUE】
- 陈艾湄.1996-牵绊【巨翼】【WAV+CUE】
- 群星《无法抗拒的谎言 电视剧原声带》[320K/MP3][69.98MB]
- 群星《无法抗拒的谎言 电视剧原声带》[FLAC/分轨][372.04MB]