国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python處理xml文件的方法小結(jié)

2019-11-25 16:12:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了python處理xml文件的方法。分享給大家供大家參考,具體如下:

前一段時(shí)間因?yàn)楣ぷ鞯男枰瑢W(xué)習(xí)了一點(diǎn)用Python處理xml文件的方法,現(xiàn)在貼出來(lái),供大家參考。

xml文件是按節(jié)點(diǎn)一層一層來(lái)疊加的,最頂層的是根節(jié)點(diǎn)。比如說(shuō):

<sys:String x:Key="STR_License_WithoutLicense">Sorry, you are not authorized.</sys:String>

其中sys:String為節(jié)點(diǎn)名字,x:Key的內(nèi)容為Attribute,xml節(jié)點(diǎn)值為sys:String的子節(jié)點(diǎn),它是文本節(jié)點(diǎn)類(lèi)型。<節(jié)點(diǎn)名稱(chēng)   x:Key="Attribute">子節(jié)點(diǎn)。。。

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中取出節(jié)點(diǎn)值,在CMAD的String中查找是否已經(jīng)存在,如果存在,則返回CMAD中對(duì)應(yīng)String的NodeName(節(jié)點(diǎn)名),并把兩個(gè)節(jié)點(diǎn)名一個(gè)做節(jié)點(diǎn)名,一個(gè)做節(jié)點(diǎn)值寫(xiě)到xml文件中;如果不存在,則把RPD中的該節(jié)點(diǎn)寫(xiě)到另外一個(gè)xml文件中。代碼如下:

import xml.dom.minidomfrom xml.dom.minidom import DocumentRPD_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)#得到根節(jié)點(diǎn)RPD_root = RPD_dom.documentElementCMAD_root = CMAD_dom.documentElementdef 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來(lái)寫(xiě)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)    continueelse:  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))

PS:這里再為大家提供幾款關(guān)于xml操作的在線工具供大家參考使用:

在線XML/JSON互相轉(zhuǎn)換工具:
http://tools.VeVB.COm/code/xmljson

在線格式化XML/在線壓縮XML
http://tools.VeVB.COm/code/xmlformat

XML在線壓縮/格式化工具:
http://tools.VeVB.COm/code/xml_format_compress

XML代碼在線格式化美化工具:
http://tools.VeVB.COm/code/xmlcodeformat

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python操作xml數(shù)據(jù)技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 周口市| 青海省| 西青区| 都江堰市| 莆田市| 南开区| 怀安县| 泸溪县| 康平县| 出国| 泉州市| 沙坪坝区| 阳西县| 长寿区| 曲松县| 卓尼县| 沧源| 永和县| 青海省| 嘉定区| 萨嘎县| 全椒县| 新源县| 邵阳县| 无棣县| 潞城市| 三河市| 揭东县| 名山县| 衡水市| 格尔木市| 仙游县| 潼南县| 集贤县| 和龙市| 突泉县| 太仆寺旗| 濮阳市| 甘孜| 公主岭市| 含山县|