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 相关文章推荐
Python的Django框架中TEMPLATES项的设置教程
May 29 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
python3+PyQt5自定义视图详解
Apr 24 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
python实现图片插入文字
Nov 26 Python
安装PyInstaller失败问题解决
Dec 14 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
详解python算法常用技巧与内置库
Oct 17 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模板引擎Smarty的缓存使用总结
2014/04/24 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
使用Python实现从各个子文件夹中复制指定文件的方法
2018/10/25 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
详解python UDP 编程
2020/08/24 Python
python实现移动木板小游戏
2020/10/09 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
学生发电厂实习自我鉴定
2013/09/22 职场文书
运动会跳远广播稿
2014/02/04 职场文书
大学生工作求职信
2014/06/23 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
综合实践活动报告
2015/02/05 职场文书
初中生物教学反思
2016/02/20 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js