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实现给qq邮箱发送邮件的方法
May 28 Python
Python画图学习入门教程
Jul 01 Python
windows下python连接oracle数据库
Jun 07 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
详解Python绘图Turtle库
Oct 12 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 Python
python神经网络学习 使用Keras进行简单分类
May 04 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
Phpbean路由转发的php代码
2008/01/10 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
python使用Berkeley DB数据库实例
2014/09/26 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python数据类型详解(一)字符串
2016/05/08 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
Python3监控疫情的完整代码
2020/02/20 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
介绍一下Ruby的特点
2013/01/20 面试题
测绘工程本科生求职信
2013/10/10 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
捐款倡议书范文
2014/02/02 职场文书
优秀求职信
2014/05/29 职场文书
职务任命书范本
2014/06/05 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
工商行政处罚决定书
2015/06/24 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
浅谈Python 中的复数问题
2021/05/19 Python
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js