Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/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
Python 将XML数据读入字典_Python_Python 3.x_Xml Parsing_Elementtree - Fatal编程技术网

Python 将XML数据读入字典

Python 将XML数据读入字典,python,python-3.x,xml-parsing,elementtree,Python,Python 3.x,Xml Parsing,Elementtree,我有一个小的XML片段,如下所示。我想得到: 组名属性 与groupname对应的groupfilter表达式属性 我需要将这些值显示为表,所以必须使用组名的对应表达式 我的XML文件: 我的尝试: root1是将xml解析为文件的etree的根元素 for setvar in root1.findall('.//group'): setname.append(setvar.get('name')) groupfilter = setvar.findall('.//groupfi

我有一个小的XML片段,如下所示。我想得到:

组名属性 与groupname对应的groupfilter表达式属性 我需要将这些值显示为表,所以必须使用组名的对应表达式

我的XML文件:

我的尝试:

root1是将xml解析为文件的etree的根元素

for setvar in root1.findall('.//group'):
    setname.append(setvar.get('name'))
    groupfilter = setvar.findall('.//groupfilter')
    if groupfilter:
        for i in groupfilter:
            if i.get('expression'):
                setexpression.append(i.get('expression'))
             else:
                 setexpression.append('')

为了将结果显示为表,我将它们附加到列表中。是否可以将这两个数据提取为字典中的键、值对?

不需要转换为dict或list。只需使用XML树作为基本数据结构

for group in tree.iterfind('.//group'):
    for groupfilter in group.iterfind('.//groupfilter[@expression]'):
        groupname = group.get('name')
        expression = groupfilter.get('expression')

        print([groupname, expression])
这仅选择实际具有表达式的groupfilter元素

通过所有groupfilter元素同样容易:

for group in tree.iterfind('.//group'):
    for groupfilter in group.iterfind('.//groupfilter'):
        groupname = group.get('name')
        expression = groupfilter.get('expression', '')  # default: empty string

        print([groupname, expression])

为第二个代码示例获取name和expression@tomalak的重复值?你当然知道。当你看一下你的XML,你就会明白为什么。是的,有多个GroupFilter。但是,如果找不到表达式属性,是否可以设置一些条件以返回null“”@如果只想选择顶级元素,而不是嵌套元素,请使用“./groupfilter”而不是“./groupfilter”。Python中没有空值,但没有空值。如果访问未定义的属性,get将返回None,但在您的问题中,您似乎想要一个空字符串,所以我的代码就是这样做的。你会知道要改变什么。