You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BeautifulSoup处理XML时find_next跳出employee节点取值错误问题

问题原因

BeautifulSoup的find_next()方法的作用是查找整个文档树中当前节点之后的第一个匹配节点,本身不会受当前节点所属父节点的范围限制。你代码中employee节点下的given节点(对应值Jill)之后,整个文档里的下一个given标签属于manager节点,对应值为H,因此会跨节点拿到错误结果。而manager节点的逻辑运行正常,是因为manager节点本身就包含两个given标签,第一个given的find_next匹配结果刚好还在manager节点内部,因此没有触发异常。

修复方案

你可以将查找范围限制在当前<name>节点内部,直接从<name>节点下获取所有given标签,按索引取值,不存在对应索引时返回指定的空值即可,修改后的代码如下:

employee = soup.find("employee")

for name_node in employee.find_all('name'):
    given_list = name_node.find_all('given')
    # 取名字
    fname = given_list[0].get_text() if len(given_list) >= 1 else None
    print("Emp_F_Name: ", fname)
    # 取中间名,没有第二个given时返回指定值
    mname = given_list[1].get_text() if len(given_list) >= 2 else "None or NULL"
    print("Emp_M_Name: ", mname)
    # 取姓氏
    lname = name_node.find('family').get_text() if name_node.find('family') else None
    print("Emp_L_Name: ", lname)

该逻辑同样适配manager节点,只需要将查找根节点替换为manager即可直接复用。

内容的提问来源于stack exchange,提问作者Jaytee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:45:03