python xml 파일 처리 방법 소결

5220 단어 pythonxml 파일
이 글 의 실례 는 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))

PS:여기 서 xml 작업 에 관 한 온라인 도 구 를 몇 가지 더 제공 하여 참고 하 시기 바 랍 니 다.
온라인 XML/JSON 상호 변환 도구:
http://tools.jb51.net/code/xmljson
온라인 포맷 XML/온라인 압축 XML:
http://tools.jb51.net/code/xmlformat
XML 온라인 압축/포맷 도구:
http://tools.jb51.net/code/xml_format_compress
XML 코드 온라인 포맷 미화 도구:
http://tools.jb51.net/code/xmlcodeformat
파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기