使用elementtree在Python中迭代子标记的XML子标记

使用elementtree在Python中迭代子标记的XML子标记,python,xml,elementtree,Python,Xml,Elementtree,无法遍历子标记中的子标记 已尝试通过root.iter()查找所有子标记并对其进行迭代。 但是,在标记的层次结构中不会生成输出 for child in root.iter(): child_tag = child.tag for child in root.findall('.//' + child_tag): txt = "tag1/" + "tag2/" + str(child_tag) + "/" + str(child)

无法遍历子标记中的子标记

已尝试通过root.iter()查找所有子标记并对其进行迭代。 但是,在标记的层次结构中不会生成输出

for child in root.iter():
    child_tag = child.tag

    for child in root.findall('.//' + child_tag):          
        txt = "tag1/" + "tag2/" + str(child_tag) + "/" + str(child)
        print(txt)
预期产出:

tag1
tag1/tag2
tag1/tag2/tag3
tag1/tag2/tag3/tag4
tag1/tag2/tag3/tag5
tag1/tag2/tag3/tag5/tag6
xml文件详细信息:

<tag1>
    <tag2>
        <tag3>
                <tag4>         </tag4>
                <tag5>  
                    <tag6>        </tag6>      
                </tag5>
        </tag3>
    </tag2>
</tag1>
---不符合层次结构列表

硬编码节点标记(“tag1”、“tag2”:为什么只有这些而没有其他?)是某种(严重)错误的标志
这里有一个简单的变量,递归地处理每个XML节点

代码00.py:

#/usr/bin/env蟒蛇3
导入系统
从xml.etree导入ElementTree作为ET
定义迭代(节点,路径=”):
如果路径:
当前路径=路径+“/”+节点.tag
其他:
当前路径=node.tag
打印(“{0:s}”。格式(当前路径))
对于节点中的子节点:
迭代(子级,路径=当前路径)
def main():
xml_file_name=“./file00.xml”
tree=ET.parse(xml文件名)
root=tree.getroot()
迭代(根)
如果名称=“\uuuuu main\uuuuuuuu”:
打印(“Python{0:s}{1:d}位在{2:s}\n.format(“.join(sys.version.split(“\n”)中的项的item.strip()),如果sys.maxsize>0x100000000,则为64,否则为32,sys.platform))
main()
打印(“\n完成”)
输出

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q057906081]>“e:\Work\Dev\VEnvs\py\u 064\u 03.07.03\u test0\Scripts\python.exe”code00.py
Python 3.7.3(v3.7.3:ef4ec6ed12,2019年3月25日,22:22:05)[MSC v.1916 64位(AMD64)]win32上的64位
tag1
tag1/tag2
tag1/tag2/tag3
tag1/tag2/tag3/tag4
tag1/tag2/tag3/tag5
tag1/tag2/tag3/tag5/tag6
完成。

如果您查看print语句,您只有4个标记名的空间:tag1、tag2、str(child_标记)、str(child)。因此,您的上一次打印将无法获得您想要的5级层次结构。您需要存储当前迭代元素的祖辈,并在tag1/tag2之后输出这些元素。谢谢。。。。。前两个标记的硬编码是因为所有节点都存在。我现在将删除硬编码。接下来的问题是——如何将输出添加到数据帧?嗯,我不知道。我不知道数据帧的结构和其他细节。不过你可以问另一个问题。
tag1
tag1/tag2
tag1/tag2/tag3
tag1/tag2/tag3/tag4
tag1/tag2/tag3/tag5
tag1/tag2/tag5/tag6