2012-07-09 4 views
3

ElementTree.iter()에 문제가 있습니다.Python에서 ElementTree를 사용하여 XML 처리

import elementtree.ElementTree as ET 
tree = ET.parse('XML_file.xml') 
root = tree.getroot() 
for elem in tree.iter(): 
    print elem.tag, elem.attrib 

그리고이 오류 AttributeError를 얻을 : 그래서 여기 http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/

내가 무엇을 시도했다입니다 : ElementTree 인스턴스가

'ITER'에는 속성이 없습니다

그래서 나는이 링크에서이 예제를 시도

추가 정보 : 내 Python 버전은 2.4입니다. 별도로 elementtree를 설치했습니다. 필자가 제공하는 링크의 다른 예제는 설치된 Python에서 작동하고 있습니다. ElementTree.iter() 만 작동하지 않습니다. 모든 도움에 미리 감사드립니다. 건배!

+0

중복 가능성 [ElementTree의 ITER() Python2.6 등가 (http://stackoverflow.com/questions/7616800/elementtrees-iter-equivalent-in-python2-6) –

+0

특별한 이유 당신은 파이썬 2.4를 사용해야합니까? 정말, 정말로, 정말 늙었 어. – millimoose

답변

19

, 당신은 .iter().getiterator()로 교체해야합니다, 나는 파이썬 2.4과 모듈에서이 없기 때문에 당신은 가능성이없는 트리를 들어, root 요소를 호출해야합니다 (그러나 나는 확실하지 않다 내 손).

import elementtree.ElementTree as ET 
tree = ET.parse('XML_file.xml') 
root = tree.getroot() 
for elem in root.getiterator(): 
    print elem.tag, elem.attrib 

이 기능은 Python 2.7에서 더 이상 사용되지 않는 이전 기능입니다. 파이썬 2.7의 경우, .iter()는 내장 된 모듈과 작동합니다 :

import xml.etree.ElementTree as ET 
tree = ET.parse('XML_file.xml') 
root = tree.getroot() 
for elem in root.iter(): 
    print elem.tag, elem.attrib 

측면 참고 : 표준 모듈은 또한 요소 노드를 통해 직접 반복을 (지원 즉, 더 .iter() 또는 어떤 방법 것이라고 그냥하지 for elem in root:). .iter()과 다른 점은 직계 노드를 통해서만 나타납니다. 비슷한 기능이 이전 버전의 .getchildren()으로 구현되었습니다.

+0

그래, 고마워, 내가 집에 갈 때 이것을 시도해 볼께. 내가 그걸 시도하자마자 너를 업데이트 할거야. 다시 한 번 감사드립니다! – neo

+0

getiterator()를 시도했지만 루트 폴더의 모든 자식을 호출합니다. 어떻게하면 하위 요소를 호출 할 수 있습니까? – neo

+0

네.'.iter()'와'.getiterator()'는 이렇게 정의됩니다. '.getchildren()'은 노드의 자식 (손자 없음)의 목록 만 반환합니다. Python 2.4에서도 사용할 수있는 lxml (http://lxml.de/)에 관심이있을 것입니다. API는 같지만 XPath 1.0 표현식을 구현합니다. – pepr

0

파이썬 문서에 따르면이 API는 2.5이어야하지만 존재하지 않습니다. 반복을 위해 아래에 언급 된 코드를 사용할 수 있습니다. 이렇게하면 태그를 전달할 수도 있습니다.

def iter(element, tag=None): 
    if tag == "*": 
     tag = None 
    if tag is None or element.tag == tag: 
     yield element 
    for e in element._children: 
     for e in e.iter(tag): 
      yield e 
관련 문제