Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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_Xml_Loops - Fatal编程技术网

用python解析XML数据-如何以更具python风格的方式捕获所有内容?

用python解析XML数据-如何以更具python风格的方式捕获所有内容?,python,xml,loops,Python,Xml,Loops,其目的是捕获xml文件中的所有数据。捕获后,我会将其与参考xml文件进行比较,以确保没有任何更改,然后告诉您差异是什么 我写的东西可以满足我的需要,但非常繁琐,有点凌乱!有没有更好的方法可以遍历xml文件所有深度的所有项?解决方案必须是健壮的,才能捕获所有内容 目前,像我下面这样的迭代也可能使用try/的迭代层,但这非常难看 import xml.etree.ElementTree as ET def xml_iter(file): tree = ET.parse(file)

其目的是捕获xml文件中的所有数据。捕获后,我会将其与参考xml文件进行比较,以确保没有任何更改,然后告诉您差异是什么

我写的东西可以满足我的需要,但非常繁琐,有点凌乱!有没有更好的方法可以遍历xml文件所有深度的所有项?解决方案必须是健壮的,才能捕获所有内容

目前,像我下面这样的迭代也可能使用try/的迭代层,但这非常难看

import xml.etree.ElementTree as ET

def xml_iter(file):
    
    tree = ET.parse(file)
    root = tree.getroot()
    
    namespaces = {}

    List = []
    Parent = []
    for elem in root:
        for i in elem:
            try:
                i = i.text.strip()
                List.append(i)
            except:
                pass
     
            for j in i:
                try:
                    j = j.text.strip()
                    List.append(j)
                except:
                    pass
  
                for k in j:
                    try:
                        k = k.text.strip()
                        List.append(k)
                    except:
                        pass
    return (List)
任何帮助都将不胜感激。

用户。它在所有子树上递归迭代

对于您的情况,它将类似于:

dict_list = []
text_list = []
for node in root.iter():
    dict_list.append(node.attrib) # adds to list, the dictionary of attrib
    text_list.append(node.text)

 

# do the same for other file and compare dictionaries/strings in corresponding lists.

你可以看看这位官员的例子。

谢谢!那比我用的干净多了!由于某些原因,当我查看dict.list时,im解析的XML文件没有属性。但是,当我使用node.tag时,它会获取元素名。有没有办法从元素而不仅仅是元素中获取树地址?我的子树很深,所以几乎不可能找到元素名!!XML中可能根本没有属性。链接教程中给出的示例:此处为4,第一行node.tag为“country”;node.attrib为{“name”:“Singapore”},node.text为空。对于第二行,node.tag为“rank”,node.text为4,node.attrib为null。想想HTML,同时想想什么是标记、属性和文本。然后查看用例的“查找有趣的元素”部分。