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))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值