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的dict,set,list,tuple应用详解
Jul 24 Python
Python中input和raw_input的一点区别
Oct 21 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
Fabric 应用案例
Aug 28 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
python版简单工厂模式
Oct 16 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 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处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
DOM精简教程
2006/10/03 Javascript
网上应用的一个不错common.js脚本
2007/08/08 Javascript
JQuery 小练习(实例代码)
2009/08/07 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
基于vue2.0实现简单轮播图
2017/11/27 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
python正则分组的应用
2013/11/10 Python
python使用分治法实现求解最大值的方法
2015/05/12 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python调用c++传递数组的实例
2019/02/13 Python
详解Python sys.argv使用方法
2019/05/10 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
自动化专业毕业生自荐信
2013/11/01 职场文书
八一演出活动方案
2014/02/03 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
采购部年度工作总结
2015/08/13 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis