使用了Python的 xml.etree.ElementTree 库,Python版本Python 3.6.6

from xml.etree import ElementTree

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:
res_dicts[iters.tag]["__XmlObjChildren__"] = result_lists.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(str(jsonret))
print(jsonret)

最新文章

  1. 轻量级ORM-Fluentdata入门
  2. oracle中函数和存储过程的区别和联系【转载竹沥半夏】
  3. Java:国际化
  4. My97Datepicker 去掉 “不合法格式或超期范围”自动纠错限制
  5. LightOJ1064 Throwing Dice(DP)
  6. yum mysql on centos 7
  7. cctype头文件(字符处理库)的使用
  8. cat、cp命令
  9. oldboy s21day13装饰器和推导式
  10. 优化IIS7.5支持10万个同时请求的配置方法
  11. 贪心+优先队列之更改优先级-hdu1896
  12. POJ 1390 Blocks(DP + 思维)题解
  13. json介绍和使用
  14. Flex学习笔记--多层菜单按钮
  15. php打印错误报告
  16. Java多线程超详细总结
  17. jqgrid单元格合并
  18. (转)Matlab增加块注释
  19. HBase集群的搭建
  20. P1053 篝火晚会

热门文章

  1. 从头认识js-基本概念(关键字,保留字,数据类型)
  2. py装饰器,生成器,迭代器
  3. 位运算基础(Uva 1590,Uva 509题解)
  4. Web图片资源的加载与渲染时机
  5. 遍历tree
  6. Node的require和module.exports
  7. 大型Java进阶专题(三) 软件架构设计原则(下)
  8. Java基础面试系列(一)
  9. git删除已经提交的包含敏感信息的文件(还没提交到远程仓库)
  10. Python输出水仙花数,用逗号分隔