python处理xml文件的方法小结


Posted in Python onMay 02, 2017

本文实例讲述了python处理xml文件的方法。分享给大家供大家参考,具体如下:

前一段时间因为工作的需要,学习了一点用Python处理xml文件的方法,现在贴出来,供大家参考。

xml文件是按节点一层一层来叠加的,最顶层的是根节点。比如说:

<sys:String x:Key="STR_License_WithoutLicense">Sorry, you are not authorized.</sys:String>

其中sys:String为节点名字,x:Key的内容为Attribute,xml节点值为sys:String的子节点,它是文本节点类型。<节点名称   x:Key="Attribute">子节点。。。

RPD的xml格式:

<ResourceDictionary>
<sys:String x:Key="STR_Startup_LaunchRPD">Launching Polycom RealPresence Desktop</sys:String>
<sys:String x:Key="STR_Startup_CheckFolder">Checking folder</sys:String>

CMAD的xml格式:

<language-strings>
 <ABK_CALL comment="verb (command, button on screen to press to place a call);" controls="Button" products="HDX,VSX,CMAD,Venus Main">
  <ARABIC notes="" last-change-date="" status="">打电话</ARABIC>
  <CHINESE_S notes="" last-change-date="" status="">呼叫</CHINESE_S>

该代码的功能是:

从RPD的String中取出节点值,在CMAD的String中查找是否已经存在,如果存在,则返回CMAD中对应String的NodeName(节点名),并把两个节点名一个做节点名,一个做节点值写到xml文件中;如果不存在,则把RPD中的该节点写到另外一个xml文件中。代码如下:

import xml.dom.minidom
from xml.dom.minidom import Document
RPD_Str_path = "E:/PythonCode/StringResource.en-US.xaml"
RPD_dom = xml.dom.minidom.parse(RPD_Str_path)
CMAD_Str_path = "E:/PythonCode/M500_RPM13_0522.xml"
CMAD_dom = xml.dom.minidom.parse(CMAD_Str_path)
#得到根节点
RPD_root = RPD_dom.documentElement
CMAD_root = CMAD_dom.documentElement
def IsStr_already_Translated(RPD_Str):
  for firstLevel in CMAD_root.childNodes:
    for SecondLevel in firstLevel.childNodes:
      if SecondLevel.nodeType == SecondLevel.ELEMENT_NODE:
        if SecondLevel.nodeName == "ENGLISH_US":
          if RPD_Str == SecondLevel.childNodes[0].data.strip():
            return firstLevel.nodeName
          else:
            continue
        else:
          continue
      else:
        continue
    else:
      continue
  else:
    return "Null"
#用Document来写xml文件
Mapping_doc = Document()
Mapping_root = Mapping_doc.createElement("Common_String")
Mapping_doc.appendChild(Mapping_root)
Translation_doc = Document()
Translation_root = Translation_doc.createElement("Need_Translation_String")
Translation_doc.appendChild(Translation_root)
for node in RPD_root.childNodes:
  if node.nodeType == node.ELEMENT_NODE:
#    print node.getAttribute("x:Key") +"  +  "+ node.childNodes[0].data
  CMAD_Key = IsStr_already_Translated(node.childNodes[0].data.strip())
  if(CMAD_Key != "Null"):
    mKey = Mapping_doc.createElement(node.getAttribute("x:Key"))
    Mapping_root.appendChild(mKey)
    mValue = Mapping_doc.createTextNode(CMAD_Key)
    mKey.appendChild(mValue)
  elif(CMAD_Key == "Null"):
    Key = Translation_doc.createElement('sys:String')
    Translation_root.appendChild(Key)
    Key.setAttribute('x:Key', node.getAttribute("x:Key"))
    Value = Translation_doc.createTextNode(node.childNodes[0].nodeValue)
    Key.appendChild(Value)
    continue
else:
  path1 = "E:/PythonCode/ID_Mapping.xml"
  try:
    import codecs
    f1 = codecs.open(path1, "wb", "utf-8")
    f1.write(Mapping_doc.toprettyxml(indent=" "))
  except:
    print('Write xml file failed.... file:{0}'.format(path1))
  path2 = "E:/PythonCode/Need_Translate_String.xml"
  try:
    f2 = codecs.open(path2, "wb", "utf-8")
    f2.write(Translation_doc.toprettyxml(indent=" "))
  except:
    print('Write xml file failed.... file:{0}'.format(path2))
Python 相关文章推荐
pycharm 使用心得(五)断点调试
Jun 06 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
Python编写通讯录通过数据库存储实现模糊查询功能
Jul 18 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
Python 中@property的用法详解
Jan 15 Python
Python能做什么
Jun 02 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
python实现的AES双向对称加密解密与用法分析
May 02 #Python
python中安装模块包版本冲突问题的解决
May 02 #Python
Python 操作MySQL详解及实例
Apr 30 #Python
浅谈function(函数)中的动态参数
Apr 30 #Python
python脚本爬取字体文件的实现方法
Apr 29 #Python
Python在图片中添加文字的两种方法
Apr 29 #Python
Python实现对字符串的加密解密方法示例
Apr 29 #Python
You might like
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
php中adodbzip类实例
2014/12/08 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
2016/07/10 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
vue使用openlayers实现移动点动画
2020/09/24 Javascript
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
浅析python的Lambda表达式
2019/02/27 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
Python命令行click参数用法解析
2019/12/19 Python
基于torch.where和布尔索引的速度比较
2020/01/02 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
2014全国两会学习心得体会2000字
2014/03/10 职场文书
争先创优心得体会
2014/09/12 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
java泛型通配符详解
2021/07/25 Java/Android