【发布时间】:2014-08-05 12:37:59
【问题描述】:
这是一个 XML 解析器代码 sn-p,它返回 None 值。这是一个大型 XML 文件,其中包含很多这样的子字段:
<root>
<field name ="1">
<field name ="2" showname ="ZZZ">
<field name ="3" showname="YYY">
<field name ="4" showname="XXX"/>
</field>
</field>
</field>
findall() 查找所有带有标签的元素,它们是当前元素的直接子元素。我试过这个,但它没有返回。它也不打印任何内容。
def findXXX(field):
if field.get('name') == 'XXX' :
return field.get('showname')
else:
for fieldchild in field.findall('field'):
return findXXX(fieldchild)
如果我这样写,它会打印正确的值,但是它返回 None。
def findXXX(field):
if field.get('name') == 'XXX' :
print field.get('showname')
return field.get('showname')
else:
for fieldchild in field.findall('field'):
findXXX(fieldchild)
【问题讨论】:
-
在您的第一个代码块中,我怀疑在
for循环内有一个无条件的return是一个逻辑错误;它只会在终止前迭代一次。 -
你的递归只探索树的最左边的分支,因为你
return立即在你的for循环中。要么在列表中累积并在循环结束时返回,要么将其重写为生成器。 -
顺便说一句,您是要测试
'name'属性还是'showname'属性?您正在针对'XXX'进行测试。
标签: python recursion elementtree