首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和递归- XML解析新手入门

Python和递归- XML解析新手入门
EN

Stack Overflow用户
提问于 2019-08-14 11:45:53
回答 1查看 39关注 0票数 0

我可以打开并读取XML文件。

我想做的是一个递归,打印出当前节点的所有子元素。

(可怕的)迭代方法嵌套了for循环:

代码语言:javascript
复制
root = tree.getroot()
for child in root:
    print (child.tag, child.text)
    for gen1 in child:
        print(child.tag, "\t" , gen1.tag, "\t\t", gen1.text)
        for gen2 in gen1:
            print(child.tag, "\t" , gen1.tag, "\t" ,gen2.tag, "\t\t", gen2.text)
            for gen3 in gen2:
                print(child.tag, "\t" , gen1.tag, "\t" , gen2.tag, "\t", gen3.tag, "\t\t", gen3.text)
                for gen4 in gen3:
                    print(child.tag, "\t" , gen1.tag, "\t" , gen2.tag, "\t", gen3.tag, "\t", gen4.tag, "\t\t", gen4.text)
                    for gen5 in gen4:
                        print(child.tag, "\t" , gen1.tag, "\t" , gen2.tag, "\t", gen3.tag, "\t", gen4.tag, "\t", gen5.tag, "\t\t", gen5.text)
                        for gen6 in gen5:
                            print(child.tag, "\t" , gen1.tag, "\t" , gen2.tag, "\t", gen3.tag, "\t", gen4.tag, "\t", gen5.tag, "\t", gen6.tag, "\t\t", gen6.text)
                            for gen7 in gen6:
                                print(child.tag, "\t" , gen1.tag, "\t" , gen2.tag, "\t", gen3.tag, "\t", gen4.tag, "\t", gen5.tag, "\t", gen6.tag, "\t", gen7.tag, "\t\t", gen7.text)

我不能用“这个节点没有子节点”来停止递归。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-14 17:49:57

这是一个解决方案,我可能会弄错格式:

代码语言:javascript
复制
def traverse(node,ances):
    to_print = f"{ances}{node.tag}\t{node.text}"
    print(to_print)
    for child in node:
        traverse(child,to_print+"\t")

traverse(root,"")

当没有任何子级时,您不需要设置显式的停止条件。在这种情况下,for循环内部将不会有任何traverse调用,递归将自动停止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57487908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档