本文实例讲述了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程序设计有所帮助。