Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ElementTree在Python中处理XML_Python_Xml_Parsing_Elementtree - Fatal编程技术网

使用ElementTree在Python中处理XML

使用ElementTree在Python中处理XML,python,xml,parsing,elementtree,Python,Xml,Parsing,Elementtree,ElementTree.iter()有问题 所以我在这个链接中尝试了这个例子: 以下是我尝试过的: 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' 附加信息:

ElementTree.iter()有问题

所以我在这个链接中尝试了这个例子:

以下是我尝试过的:

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.4i单独安装的elementtree。我提供的链接中的其他示例在我安装的Python中工作。只有ElementTree.iter()不工作。提前感谢你的帮助。干杯

尝试使用findall而不是iter

在您的例子中,您应该将
.iter()
替换为
.getiterator()
,并且您可能应该为
元素而不是树调用它(但我不确定,因为我手头没有Python 2.4和模块)

这是Python2.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()
或任何调用的方法,只支持根元素的
)。它不同于
.iter()
——它只通过直接子代节点。根据python文档,在较旧的版本中实现了类似的功能,如
.getchildren()

,该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

您必须使用Python2.4的任何特定原因是否可能重复?真的,真的,真的很旧了。好的,谢谢你,我回家后会试试,我一试就告诉你。再次感谢!我尝试了getiterator(),但它调用根文件夹的所有子文件夹。如何调用子元素的子元素?是的,
.iter()
.getiterator()
是这样定义的。
.getchildren()
只返回节点的子节点列表(无子节点)。您可能对同样适用于Python 2.4的lxml()感兴趣,它具有相同的API,但也实现了XPath 1.0表达式。我现在使用.find()查找特定的子元素,这是一个好主意吗?或者有另一种方法调用specifi元素?再次感谢!。这取决于你需要找到什么。
.find(pattern)
查找具有所需属性的第一个元素。
模式可以是标记或XPath表达式。类似地,
.getiterator(tag)
迭代给定标记名的所有元素。了解如何使用XPath、ElementTree或lxml。
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