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之复习if语句
Oct 02 Python
pymongo实现控制mongodb中数字字段做加法的方法
Mar 26 Python
图文详解WinPE下安装Python
May 17 Python
SQLite3中文编码 Python的实现
Jan 11 Python
《与孩子一起学编程》python自测题
May 27 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
python字典一键多值实例代码分享
Jun 14 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
jupyter notebook 增加kernel教程
Apr 10 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
May 26 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 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模板生成html文档的方法
2010/04/12 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP中__get()和__set()的用法实例详解
2013/06/04 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
JavaScript异步上传图片文件的实例代码
2017/07/04 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
python列表操作之extend和append的区别实例分析
2015/07/28 Python
用yum安装MySQLdb模块的步骤方法
2016/12/15 Python
python字典快速保存于读取的方法
2018/03/23 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
中学生团员自我评价分享
2013/12/07 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
党员检讨书
2014/10/13 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
vue实现在data里引入相对路径
2022/06/05 Vue.js