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 相关文章推荐
详解python3百度指数抓取实例
Dec 12 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
Aug 12 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
如何在Python 游戏中模拟引力
Mar 27 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
教你怎么用Python操作MySql数据库
May 31 Python
Python常遇到的错误和异常
Nov 02 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
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
深入PHP数据加密详解
2013/06/18 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python求解水仙花数的方法
2015/05/11 Python
Python入门教程之运算符与控制流
2016/08/17 Python
简单了解什么是神经网络
2017/12/23 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
用python爬取租房网站信息的代码
2018/12/14 Python
python修改txt文件中的某一项方法
2018/12/29 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
日语系毕业生推荐信
2013/11/11 职场文书
社区端午节活动方案
2014/01/28 职场文书
2014年新生军训方案
2014/05/01 职场文书
党员政治学习材料
2014/05/14 职场文书
天坛导游词
2015/02/02 职场文书
环卫工人慰问信
2015/02/15 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android