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

使用lxml读取XML时,如何获取元素下的全部子元素内容?

解决lxml获取XML元素下所有子元素内容的问题

你遇到的核心问题有两个:一是find()方法只会返回第一个匹配的元素,二是混淆了lxml和其他库的方法名(findAll是BeautifulSoup的方法,lxml里对应的是findall())。下面是完整的解决方案:

步骤1:正确获取所有子元素

要获取某个节点下的所有匹配子元素,使用lxml Element对象的findall()方法(注意是小写开头+all),然后遍历这些元素并拼接内容。针对你的XML结构,示例代码如下:

from lxml import etree as ET

tree = ET.parse('data/data.xml')
root = tree.getroot()
records = tree.findall('record')

for record in records:
    # 处理NAME字段:获取所有P元素并拼接文本
    name_elements = record.findall("NAME/P")
    full_name = "\n".join([elem.text.strip() for elem in name_elements if elem.text])
    
    # 处理ADDRESS字段
    address_elements = record.findall("ADDRESS/P")
    full_address = "\n".join([elem.text.strip() for elem in address_elements if elem.text])
    
    # 处理SUBJECT字段
    subject_elements = record.findall("SUBJECT/P")
    full_subject = "\n".join([elem.text.strip() for elem in subject_elements if elem.text])
    
    # 处理QUERYS字段
    querys_elements = record.findall("QUERYS/P")
    full_querys = "\n".join([elem.text.strip() for elem in querys_elements if elem.text])
    
    # 打印测试结果
    print("NAME内容:\n", full_name)
    print("ADDRESS内容:\n", full_address)
    print("SUBJECT内容:\n", full_subject)
    print("QUERYS内容:\n", full_querys)
    
    # 后续插入MySQL的逻辑(示例)
    # 假设你已经建立了数据库连接和cursor
    # cursor.execute(
    #     "INSERT INTO your_table (NAME, ADDRESS, SUBJECT, QUERYS) VALUES (%s, %s, %s, %s)",
    #     (full_name, full_address, full_subject, full_querys)
    # )
    # conn.commit()

关键说明

  • find() vs findall():find()仅返回第一个匹配的元素,而findall()会返回所有匹配的元素列表,这就是你之前只拿到第一个P内容的原因。
  • 方法名注意:lxml中是findall()(全小写),而findAll()是BeautifulSoup库的方法,所以你之前调用record.findAll会提示方法不存在。
  • 文本处理:用join()拼接所有P元素的文本,同时用strip()去除多余的空格,if elem.text避免处理没有文本的空元素。

运行这段代码后,你就能获取每个字段下的全部子元素内容,之后就可以将这些变量插入到MySQL对应的字段中了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:14:04