2012-11-20 5 views
4

저는 Python을 처음 사용하고 xml 구문 분석을 이해하고 싶습니다. XML 노드 집합을 처리하는 일반적인 프로그램을 만드는 방법에 대한 훌륭한 예제 나 설명을 찾을 수 없었습니다.Python에서 XML을 걷기

xml 스키마에 대한 정보가 없어도 모든 요소와 특성을 이름과 값으로 분류하고 식별 할 수 있기를 원합니다. 태그 이름이나 텍스트를 사용하여 요소 및 특성을 호출하는 것에 의존하고 싶지 않습니다.

누군가 올바른 방향으로 나를 가리켜 주시겠습니까?

감사

UPDATE : ". 어떻게 일반적으로 스키마에 대한 친밀한 지식을 필요없이 XML 문서의 루트 노드에서 모든 노드를 재귀 않는다"

, 물었다 받고 구체적인 질문

당시에는 파이썬에 익숙하지 않았고 다른 많은 언어에서이 작업을 수행하는 방법을 이해했기 때문에 명명 된 노드에 의존하지 않고 DOM을 탐색하는 실제 예제에 당황했습니다. 나는 원했다.

희망 사항은이 스레드의 정보가 실제로 유용하기 때문에 질문을 명확히하기를 바랍니다.

+0

아무 것도 시도해 보지 않으셨습니까? lxml 살펴보기. – monkut

+0

참조 : http://www.diveintopython.net/xml_processing/index.html#kgp.divein – Himanshu

+0

안녕하세요, 이것이 왜 "진짜 질문이 아닙니다"로 닫혀 있는지 확신하지 못합니까? 나는 매우 구체적인 질문을했고, 이해하려고 시도했던 개념에 대해 꽤 정확했다. 내 질문에 어떤 문제가있어서 다시 같은 실수를하지 않습니까? – Baywatch

답변

4

체크 아웃 파이썬의 도움에 ElementTree의 문서

해당 페이지에서 코드의 기본 스텁은 다음과 같습니다 더 이상 아이가 없을 때까지

import xml.etree.ElementTree as ET 
    tree = ET.parse(filename) 
    root = tree.getroot() 
    for child in root: 
     child.tag, child.attrib 

재귀 하향 for child in root:을 계속 실행 할 수 있습니다 .

+0

고마워! 정확히 내가 무엇을 찾고 있었는지. – Baywatch

3

사용 cElementTree; 은 Python 버전의 ElementTree보다 15-20 배 빠르며 2-5 배 적은 메모리를 사용합니다. http://effbot.org/zone/celementtree.htm

import xml.etree.cElementTree as ET 
tree = ET.parse('test.xml') 
for elem in tree.getiterator(): 
    if elem.tag: 
     print 'my name:' 
     print '\t'+elem.tag 
    if elem.text: 
     print 'my text:' 
     print '\t'+(elem.text).strip() 
    if elem.attrib.items(): 
     print 'my attributes:' 
     for key, value in elem.attrib.items(): 
      print '\t'+'\t'+key +' : '+value 
    if list(elem): # use elem.getchildren() for python2.6 or before 
     print 'my no of child: %d'%len(list(elem)) 
    else: 
     print 'No child' 
    if elem.tail: 
     print 'my tail:' 
     print '\t'+'%s'%elem.tail.strip() 
    print '$$$$$$$$$$' 
관련 문제