Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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
使用元素树解析XML(Python)_Python_Xml_Elementtree - Fatal编程技术网

使用元素树解析XML(Python)

使用元素树解析XML(Python),python,xml,elementtree,Python,Xml,Elementtree,我正在学习如何使用ElementTree,在解析XML时遇到了一些问题,如下所示。我最终想创建一个字典,其中键是函数id,值是被调用方id的列表(例如,{'1':[20,22]},{'3':[10,30,20,92]}),但我很难理解如何迭代每个函数并访问id和被调用方属性。我一直在尝试使用findall(),但没有成功,所以我想知道是否可以得到一些帮助。谢谢 <?xml version="1.0" encoding="utf-8"?> <

我正在学习如何使用ElementTree,在解析XML时遇到了一些问题,如下所示。我最终想创建一个字典,其中键是函数id,值是被调用方id的列表(例如,{'1':[20,22]},{'3':[10,30,20,92]}),但我很难理解如何迭代每个函数并访问id和被调用方属性。我一直在尝试使用findall(),但没有成功,所以我想知道是否可以得到一些帮助。谢谢

<?xml version="1.0" encoding="utf-8"?>
<myXML>
    <version>2</version>
    <functions>
        <function>
            <id>1</id>
            <callee>20</callee>
            <callee>22</callee>
        </function>
        <function>
            <id>3</id>
            <callee>10</callee>
            <callee>30</callee>
            <callee>20</callee>
            <callee>92</callee>
        </function>
    </functions>
</myXML>

2.
1.
20
22
3.
10
30
20
92

尝试以下方法:

import xml.etree.ElementTree as ET
calls = """[your xml above]"""
doc = ET.fromstring(calls)

calls_dict = {}
funcs = doc.findall('.//function')
for func in funcs:
    id = func.find('./id').text
    callees = [call.text for call in func.findall('.//callee')]
    calls_dict[id]=callees
for a,b in calls_dict.items():
    print(a,b)
输出:

1 ['20', '22']
3 ['10', '30', '20', '92']

非常感谢。成功了@印度支持很高兴听到!