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读写及压缩和解压缩文件的示例
Jul 08 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
python web基础之加载静态文件实例
Mar 20 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
学习python的前途 python挣钱
Feb 27 Python
PyQt5实现简易计算器
May 30 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
python 实现ping测试延迟的两种方法
Dec 10 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
聊天室php&amp;mysql(六)
2006/10/09 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
深入浅析php json 格式控制
2015/12/24 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
pandas对指定列进行填充的方法
2018/04/11 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
如何真正的了解python装饰器
2020/08/14 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
科研课题实施方案
2014/03/18 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
基于angular实现树形二级表格
2021/10/16 Javascript