Flask递归查询XML仅返回首个结果问题排查求助
Flask查询XML仅返回首个结果的排查方案
1. 递归函数提前终止
如果你的myFunction()在找到匹配项后直接return,会中断递归流程,导致后续节点没被遍历。比如:
def myFunction(node, target_id, list_output): if node.attrib.get('id') == target_id: list_output.append(node.text) return # 这里直接返回,后续节点根本没机会处理 for child in node: myFunction(child, target_id, list_output)
改法:删掉那个多余的return,让递归能走完所有节点:
def myFunction(node, target_id, list_output): if node.attrib.get('id') == target_id: list_output.append(node.text) # 遍历所有子节点,不提前结束 for child in node: myFunction(child, target_id, list_output)
2. 列表传递或初始化错误
要是你在递归内部每次都新建list_output,或者合并结果时逻辑错了,会导致结果丢失。比如这种写法:
def myFunction(node, target_id): list_output = [] if node.attrib.get('id') == target_id: list_output.append(node.text) for child in node: list_output += myFunction(child, target_id) return list_output
这种情况一旦某个分支没匹配项,返回的空列表会把之前的结果冲掉。正确做法是在递归外面初始化列表,靠引用传递进去:
# 先在外面建列表,再传给递归函数 list_output = [] myFunction(root_node, target_id, list_output)
3. Flask视图返回逻辑错了
检查你的视图函数,是不是不小心只取了列表第一个元素返回:
@app.route('/query', methods=['POST']) def query(): target_id = request.form.get('id') list_output = [] myFunction(root, target_id, list_output) return jsonify({'result': list_output[0]}) # 这里只返回第一个,自然看不到其他结果
改法:直接返回整个列表:
return jsonify({'result': list_output})
4. 前端渲染没遍历所有结果
就算后端返回了所有结果,前端如果只渲染第一个也白搭。比如HTML里写了:
<div id="result"> {{ result[0] }} </div>
改法:用循环把所有结果都渲染出来:
<div id="result"> {% for item in result %} <p>{{ item }}</p> {% endfor %} </div>
内容的提问来源于stack exchange,提问作者user22260995
相关产品推荐
相关产品推荐

