我可以打开并读取XML文件。
我想做的是一个递归,打印出当前节点的所有子元素。
(可怕的)迭代方法嵌套了for循环:
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)我不能用“这个节点没有子节点”来停止递归。有什么建议吗?
发布于 2019-08-14 17:49:57
这是一个解决方案,我可能会弄错格式:
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调用,递归将自动停止。
https://stackoverflow.com/questions/57487908
复制相似问题