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

Python提取XML中指定关键词对应的完整<profile>标签片段

问题根因

你现在写的逐行匹配逻辑,只能抓到单独包含关键词的行,没有识别<profile>标签的跨多行块边界,自然拿不到完整的节点片段。

实现代码

不需要安装第三方依赖,用状态标记逐行遍历文件就能实现需求:跟踪当前是否处于<profile>块内部,收集块内所有内容,遇到</profile>结束标签时判断块内有没有目标关键词,符合条件就把整个块存到结果里。

keyword = 'Georgia'
result = []
# 状态标记变量
collecting = False
current_block = []
hit_keyword = False

with open('test_input.xml', 'r', encoding='utf-8') as f:
    for line in f:
        # 碰到profile开标签,启动块收集
        if '<profile>' in line:
            collecting = True
            hit_keyword = False
            current_block = [line]
            if keyword in line:
                hit_keyword = True
            continue
        
        if collecting:
            current_block.append(line)
            if keyword in line:
                hit_keyword = True
            # 碰到profile闭标签,结束当前块收集
            if '</profile>' in line:
                collecting = False
                if hit_keyword:
                    result.append(''.join(current_block))
                # 重置临时变量
                current_block = []
                hit_keyword = False

# 写入结果文件
with open('test_output.xml', 'w', encoding='utf-8') as f:
    # 如果需要输出是格式合规的完整XML,就把下面两行注释打开,加个根节点包裹
    # f.write('<project>\n')
    f.write('\n'.join(result))
    # f.write('\n</project>')
运行效果

用你提供的源XML文件跑这段代码,输出结果和预期完全一致,会完整提取两个包含Georgia关键词的<profile>块,保留块内所有层级的内容和首尾标签,不会只抽取零散的单行内容。

适配说明

如果后续你的XML里<profile>标签带属性(比如<profile name="test">),只需要把开标签的判断条件从'<profile>' in line改成'<profile' in line就能兼容。如果需要输出严格合法的XML,放开代码里写根节点的注释即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:54:29