本文实例讲述了python处理xml文件的方法。分享给大家供大家参考,具体如下:
前一段时间因为工作的需要,学习了一点用Python处理xml文件的方法,现在贴出来,供大家参考。
xml文件是按节点一层一层来叠加的,最顶层的是根节点。比如说:
1
|
< 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格式:
1
2
3
|
< 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格式:
1
2
3
4
|
< 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文件中。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
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程序设计有所帮助。