python处理xml文件

前一段时间因为工作的需要,学习了一点用python处理xml文件的方法,现在贴出来,供大家参考。

xml文件是按节点一层一层来叠加的,最顶层的是根节点。比如说:Sorry, you are not authorized.,其中sys:String为节点名字,x:Key的内容为Attribute,xml节点值为sys:String的子节点,它是文本节点类型。<节点名称   x:Key=“Attribute”>子节点。。。

RPD的xml格式:


Launching Polycom RealPresence Desktop
    Checking folder


CMAD的xml格式:


  
    إجراء مكالمة
    呼叫


该代码的功能是:

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