簡體   English   中英

使用ElementTree在Python中處理XML

[英]Processing XML in Python with ElementTree

我有一個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實例沒有屬性'iter'

附加信息:我的Python版本是2.4我單獨安裝了elementtree。 我提供的鏈接中的其他示例是在我的Python中安裝。 只有ElementTree.iter()不起作用。 在此先感謝您的所有幫助。 干杯!

在你的情況下,你應該用.iter()替換.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

旁注:標准模塊也支持通過元素節點直接迭代(即沒有.iter()或任何調用的方法,只是for elem in root: )。 它與.iter()不同 - 它只通過直接后代節點。 類似的功能在舊版本中實現為.getchildren()

嘗試使用findall而不是iter。 ElementTree在Python2.6中的iter()等價物

根據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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM