4

ElementTree.iter() に問題があります。

だから私はこのリンクでこの例を試しました: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/

だからここに私が試したことがある:

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: ElementTree instance has no attribute 'iter'

追加情報: Python のバージョンは 2.4 です。個別に elementtree をインストールしました。私が提供するリンクの他の例は、インストールされた Python で動作しています。ElementTree.iter() だけが機能していません。ご協力いただきありがとうございます。乾杯!

4

3 に答える 3

20

あなたの場合、.iter()byを置き換える必要があり、ツリーではなく要素.getiterator()に対して呼び出す必要がありrootます (ただし、Python 2.4 とモジュールを手元に持っていないため、わかりません)。

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 で廃止された古い機能です。Python 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

補足:標準モジュールは、要素ノードを介した直接反復もサポートしています (つまり、 no.iter()または呼び出されたメソッドは何でも、 のみfor elem in root:)。とは異なります.iter()-- 直接の子孫ノードのみを通過します。と同様の機能が古いバージョンに実装されています.getchildren()

于 2012-07-09T07:44:20.440 に答える
1

iter の代わりに findall を使用してみてください。Python2.6 の ElementTree の iter() に相当するもの

于 2012-07-09T07:29:29.893 に答える
0

Python ドキュメントによると、この 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
于 2012-07-09T07:50:08.613 に答える