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的面向对象思想分析
Jan 14 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python程序中设置HTTP代理
Nov 06 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
python实现媒体播放器功能
Feb 11 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Python Pandas数据结构简单介绍
Jul 03 Python
python能开发游戏吗
Jun 11 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
python简单实现插入排序实例代码
Dec 16 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
vue-cli项目使用mock数据的方法(借助express)
2019/04/15 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
python定位xpath 节点位置的方法
2019/08/27 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
html5与css3小应用
2013/04/03 HTML / CSS
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
经济管理专业毕业生推荐信
2013/11/11 职场文书
专升本个人自我评价
2013/12/22 职场文书
晚宴邀请函范文
2014/01/15 职场文书
火锅店营销方案
2014/02/26 职场文书
同学聚会邀请函
2015/01/30 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
读书笔记格式
2015/07/02 职场文书
心理健康教育主题班会
2015/08/13 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server