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获取文件后缀名及批量更新目录下文件后缀名的方法
Nov 11 Python
python根据给定文件返回文件名和扩展名的方法
Mar 27 Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
flask框架路由常用定义方式总结
Jul 23 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
Python3.7+tkinter实现查询界面功能
Dec 24 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
Mar 03 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判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python 实时遍历日志文件
2016/04/12 Python
深入理解Python变量与常量
2016/06/02 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python学生信息管理系统(完整版)
2020/04/05 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
2018/12/11 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
python字符串Intern机制详解
2019/07/01 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
自我鉴定书范文
2013/10/02 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
2014年药房工作总结
2014/11/22 职场文书
中秋节祝酒词
2015/08/12 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书