python 下xml和dict相互转化,含attributes

2023-05-16

from lxml import etree

def dictlist(node):
 res = {}
 res[node.tag] = []
 xmltodict(node,res[node.tag])
 reply = {}
 reply[node.tag] = {'value':res[node.tag],'attributes':node.attrib}
 
 return reply

def xmltodict(node,res):
 rep = {}
 
 if len(node):
  #n = 0
  for n in list(node):
   rep[node.tag] = []
   value = xmltodict(n,rep[node.tag])
   if len(n):
   
    value = {'value':rep[node.tag],'attributes':n.attrib}
    #print value
    res.append({n.tag:value})
   else :
    #print rep[node.tag][0]
    res.append(rep[node.tag][0])
   
 else:
  value = {}
  value = {'value':node.text,'attributes':node.attrib}
  #print value
  res.append({node.tag:value})
 
 return
def fromstring(strdict=None):
 root = etree.fromstring(strdict)
 return dictlist(root)

def parse(filename=None):
 tree = etree.parse(filename)
 return dictlist(tree.getroot())
 

def main():
 tree = etree.parse('test.xml')
 print tree
 res = dictlist(tree.getroot())
 print res 
 
def dict2xml(d):
 from xml.sax.saxutils import escape
 def unicodify(o):
  if o is None:
   return u'';
  return unicode(o)
 lines = ["<?xml version=/"1.0/" encoding=/"utf-8/"?>"]
 def addDict(node, offset):
  for name, value in node.iteritems():
   if name == "attributes":
    strqq = lines[len(lines)-1]
    index = strqq.find(u"<")
    strqq = strqq[index+1:len(strqq)-1]
    for x,y in value.iteritems():
     strqq = strqq + u" " *4 + u"%s='%s'"%(x,y)
    lines[len(lines)-1] = u" " * index + u"<%s>"%(strqq)
   else:
    if isinstance(value, dict):
     lines.append(offset + u"<%s>" % name)
     addDict(value, offset + u" " * 4)
     lines.append(offset + u"</%s>" % name)
    elif isinstance(value, list):
     for item in value:
      if isinstance(item, dict):
       addDict(item, offset + u" " * 4)
      else:
       lines.append(offset + u"<%s>%s</%s>" % (name, escape(unicodify(item)), name))
    else:
     if value != "":
      pass
 addDict(d, u"")
 lines.append(u"")
 return u"/n".join(lines)   
    
#if __name__ == '__main__' :
# main()

test 就不帮大家写了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 下xml和dict相互转化,含attributes 的相关文章

  • OC语言——构造方法和分类的使用

    一 构造方法 1调用 43 alloc分配存储空间 Person p 61 Person alloc 2初始化 init Person p1 61 p init 可以整合为一句 Person p2 61 Person alloc init
  • 使用CSDN-markdown

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • 【笔试&面试】关于动态链接库

    动态链接库英文为DLL xff0c 是Dynamic Link Library 的缩写形式 xff0c DLL 是一个包含可由多个程序同时使用的代码和数据的库 xff0c DLL 不是可执行文件 动态链接提供了一种方法 xff0c 使进程可
  • 虚函数表的实现细节

    1 虚函数 虚表是怎么实现的 xff1f 虚表存放在哪里 xff1f 虚表中的数据是在什么时候确定的 xff1f 对象中的虚表指针又在什么时候赋值的 xff1f 我们很难通过 C 43 43 语言本身来找到答案 C 43 43 标准给编译器
  • 三种工厂模式区别总结

    工厂模式分为三种 xff1a 简单工厂 工厂模式和抽象工厂模式 三者之间存在哪些异同呢 xff1f 先分别看看各个模式的特点 一 简单工厂模式 xff1a 实现了算法和界面的分离 xff0c 也就是将业务逻辑和界面逻辑分开了 xff0c 降
  • 快速排序 改进快排的方法

    快速排序法事应用最广泛的排序算法之一 xff0c 最佳情况下时间复杂度是 O nlogn 但是 最坏情况下可能达到 O n 2 说明快速排序达到最坏情况的原因 并提出改善方案并实现 之 答 xff1a 改进方案 xff1a 改进选取枢轴的方
  • linux select函数详解

    在 Linux 中 xff0c 我们可以使用 select 函数实现 I O 端口的复用 xff0c 传递给 select 函数的参数会告诉内核 xff1a 我们所关心的文件描述符 对每个描述符 xff0c 我们所关心的状态 我们是要想从一
  • Linux epoll详解

    Linux epoll详解 一 什么是epoll epoll是什么 xff1f 按照man手册的说法 xff1a 是为处理大批量句柄而作了改进的poll 当然 xff0c 这不是2 6内核才有的 xff0c 它是在2 5 44内核中被引进的
  • 转折后的总结--2014年找工作

    转折后的总结 找工作 好吧 xff0c 还是忍不住做个总结 xff0c 毕竟还是我人生中一次比较大的事件了 非常感谢华科 xff0c 我的第二个母校能提供给我一个优秀的平台 非常感谢信息安全与保密实验室607室的老师们 xff0c 给我诸多
  • 2014找工作总结-机会往往留给有准备的人

    好基友的文章必须转 xff0c 大神一枚 xff1a 出处 xff1a http blog csdn net xiajun07061225 article details 12844801 其实我的求职过程在十一之前就已经结束了 xff0c
  • 1020 Tree Traversals

    Suppose that all the keys in a binary tree are distinct positive integers Given the postorder and inorder traversal sequ
  • 入职后的书单

    程序员一生的命运就是不停的学习 xff0c 淬炼自己的技术 xff0c 转化为自己的经验 作为新手 xff0c 首先要读的应该是 xff1a 代码整洁之道 1 JAVA核心技术 xff08 卷1 xff09 作者 Cay S Horstma
  • 国内第一本详解云GIS技术的参考书籍《云GIS技术与实践》

    书籍封面 内容简介 云计算技术从概念提出到项目落地已经经历了十余年了 xff0c GIS技术也紧跟IT主流技术大潮 xff0c 通过日趋成熟的云计算技术来解决GIS面临的诸多问题 一转眼 xff0c 云GIS技术也发展了五个年头了 xff0
  • jetpack之ViewModel

    ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据 ViewModel类让数据可在发生屏幕旋转等配置更改后继续留存 摘自官方文档 Android 框架可以管理界面控制器 xff08 如 Activity 和 Fragmen
  • 二叉树的各种创建方法

    1 前序创建 include lt stdlib h gt include lt malloc h gt include lt iostream gt include lt stack gt include lt queue gt usin
  • 虚拟机创建、发放与迁移

    虚拟机创建方法 xff1a 创建空虚拟机虚拟机克隆虚拟机 xff1a 虚拟机运行状态是可以克隆虚拟机的按照模板部署虚拟机 xff1a 模板存在 xff0c 可以调整参数 xff0c 批量部署模板转为虚拟机 xff1a 模板不存在 xff0c
  • Linux必学书籍!五本强烈推荐,你读过几本?

    深入理解Linux内核 推荐等级 xff1a 5颗星 为了透彻理解Linux的工作机理 xff0c 以及为何它在各种系统上能顺畅运行 xff0c 你需要深入到内核的心脏 cPu与外部世界的所有交互活动都是由内核处理的 xff0c 哪些程序会
  • 一个毕业6年的程序员工作经历和成长感悟(终)

    接上篇 xff1a 一个毕业6年的程序员工作经历和成长感悟 xff08 上 xff09 一个毕业6年的程序员工作经历和成长感悟 xff08 中 xff09 一个毕业6年的程序员工作经历和成长感悟 xff08 下 xff09 回望过去 6 年
  • 红包随机算法,给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。...

    前段时间做了一个笔试题 xff0c 觉得很有意思 xff0c 特此记录下来 题目如下 题目 请编写一个红包随机算法 需求为 xff1a 给定一定的金额 xff0c 一定的人数 xff0c 保证每个人都能随机获得一定的金额 比如100元的红包
  • linux下 ftp服务器如何设置上传文件的权限

    先用vi打开 vsftpd conf vsftpd的配置文件在Ubuntu下是vi etc vsftpd conf在centos 下是vi etc vsftpd vsftpd conf这个在不同的系统下可能不同原理一样 找到umask默认是

随机推荐

  • 敏捷之旅大连2013总结回顾

    12月21日 xff0c 敏捷之旅大连站如期召开 xff0c 这是今年我在大连组织的第九次程序员社区活动 xff0c 在此简单总结一下 这次活动考虑到参会人员会比平时多一些 xff0c 所以选择了中山区的比较大的会议室 xff0c 从十二点
  • 1062 Talent and Virtue

    About 900 years ago a Chinese philosopher Sima Guang wrote a history book in which he talked about people 39 s talent an
  • 演说(zhi)之法

    近年来 xff0c 参加了很多各种各样的技术会议 xff0c 在其中也听了很多高手和牛人们的演说 在总结了自己的一些经验之后 xff0c 也会在一些场合和大家分享 在以上的过程中 xff0c 越来越觉得 xff0c 想要为听众们奉献一场精彩
  • 窗体继承,然后实现按钮点击事件的重写

    做了一阵子Winform的程序之后 xff0c 越来越能够做到把窗体 控件等都看作类来对待了 以前做VB的时候 xff0c 对这些控件都是有一种敬畏的心理 xff0c 根本就不敢对其做什么 xff0c 而且当时也的确做不了什么 xff0c
  • 参加百度轻应用编程马拉松总结

    上个周末 xff0c 我到北京参加了百度举办的轻应用编程马拉松大赛 xff0c 感觉非常不错 xff0c 在此总结一下 这是我第一次参加编程马拉松的活动 xff0c 对此充满了好奇也充满了期望 xff0c 更是希望自己以后也能够组织类似的活
  • 前天奶奶来了 xff0c 把屋子里面的东西都收拾了一下 xff0c 尤其是佳佳的玩具 xff0c 有好多毛绒玩具 xff0c 都放在一个柜子的层里面了 早上佳佳醒来 xff0c 发现了新大陆 xff01 美羊羊都碰头了 xff01 维尼的碰
  • 超级简单的抽奖工具

    昨天快到中午的时候接到业务部门的一个需求 xff0c 要求对现有的抽奖软件进行改进 问题是 xff1a 现在的抽奖软件每次只能够抽出一个中奖号码 xff0c 而此次设置的各种奖项的中奖人数加起来有500人 xff0c 如果使用原有的软件 x
  • 程序员应知——把小事做好

    在从事软件开发的这些年中 xff0c 近期越来越多地听到这样的论点 xff1a 当前的程序员越来越浮躁 我的感觉也是如此 xff0c 由于在软件公司中 xff0c 人才流动特别快 xff0c 因此很多人的职位也变化的比较快 xff0c 很可
  • 程序员应知——学习、思考与分享

    有人说 xff0c 程序员是个苦差事 xff0c 一辈子总是要不停地学习 xff0c 学习新的技术 xff0c 学习新的架构 xff0c 学习新的工具 xff0c 一旦一段时间不学习 xff0c 就会发现其他人嘴里冒出来的新鲜词 xff0c
  • Evernote和有道云笔记的比较

    每个人可能都有随手记录一些事情的习惯 xff0c 可能是为了不忘记 xff0c 也可能是随时闪现在头脑中的一些想法 xff0c 因此就有了便利贴 xff0c 而在计算机或者说互联网的时代 xff0c 我们就有了更多选择 xff0c 可以随时
  • 软件开发中的哲学——世界的本原是物质(一)

    在这个系列博客的第一篇中 xff0c 首先要涉及到的哲学原理就是 世界的本原是物质 在IT领域 xff0c 有硬件和软件之分 xff0c 而二者之间的关系 xff0c 就和物质与精神类似 没有硬件的存在 xff0c 那么软件就没有能够发挥作
  • 在Prezi中输入简体中文的完美解决方案

    Prezi是一种在线制作演示文档 xff08 PPT xff09 的工具 xff0c 它与传统的Powerpoint或者Keynote的表现形式完全不同 xff0c 被称为 powerpoint的颠覆者 xff0c 在36Kr上曾经有过多篇
  • 1001 A+B Format

    Calculate a 43 b and output the sum in standard format that is the digits must be separated into groups of three by comm
  • 打印机打印列队中打印状态为错误的解决方式之一

    右键 我的电脑 xff08 win7以上为 计算机 xff09 xff0c 点击 管理 xff0c 展开 服务和应用程序 xff0c 点击 服务 找到右侧的 print spooler 项 xff0c 右键选择 停止 win 43 R打开运
  • Android版DailyInsist(五)——业务逻辑和数据操作SettingFragment & 小结

    最后一部分是提醒以及每天任务刷新 xff0c 两者都用到了 AlarmManager 这个系统管理类 提醒 提醒功能就是一个闹钟的效果 xff0c 只是这里是启动服务 xff0c 在服务里发一条notification作为提醒 设置时间时
  • IDEA项目的结构以及创建

    IDEA的项目结构应该怎么创建 一 在创建项目之前应该先知道IDEA项目的结构二 创建项目的步骤 一 在创建项目之前应该先知道IDEA项目的结构 idea项目的结构由三个部分组成 xff1a 分别是 项目 xff08 project xff
  • python插件安装--

    图像处理 安装opencv方式1 下载opencv xff0c 把cv2 pyd 放到 site packages pycharm ctrl 43 alt 43 s 找到 opencv python 直接安装 点击右下角的应用 Apply
  • RE: 从零开始的车载Android HMI(一) - Lottie

    1 前言 多年以前汽车还是以机械仪表主体的年代 xff0c 各大汽车主机厂商并不十分关注操作系统UI的交互功能 xff0c 但是随着车载SOC算力的不断提高以及主机厂商对汽车座舱竞争的白热化 座舱的HMI在设计上在强调功能性的同时也开始关注
  • Android 车载应用开发与分析(12) - SystemUI (一)

    1 前言 Android 车载应用开发与分析是一个系列性的文章 xff0c 这个是第12篇 xff0c 该系列文章旨在分析原生车载Android系统中核心应用的实现方式 xff0c 帮助初次从事车载应用开发的同学 xff0c 更好地理解车载
  • python 下xml和dict相互转化,含attributes

    from lxml import etree def dictlist node res 61 res node tag 61 xmltodict node res node tag reply 61 reply node tag 61 3