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

Python BeautifulSoup兼容解析两种异构XML提取活性/非活性元素

基于BeautifulSoup的两类异构XML统一解析方案

核心实现思路是把两种完全不同的标记规则做一层抽象适配,不绑定单一XML结构,遍历节点时按统一规则判断命中类型,最后输出标准化的提取结果,完全兼容深度嵌套场景。

匹配规则抽象

两类结构的命中逻辑做合并处理,满足任意一条规则即可判定为对应类型的元素:

  • 活性元素
    • 标签名为activeelementSubstance
    • 标签名为element且classCode属性值为ACTIM
  • 非活性元素
    • 标签名为inactiveelementSubstance
    • 标签名为element且classCode属性值为IACT

可直接运行的统一解析代码

from bs4 import BeautifulSoup

def parse_ingredient_xml(xml_text: str) -> dict:
    """
    兼容两类异构XML,提取所有活性/非活性元素的名称与code编码
    返回格式:
    {
        "active": [{"name": "元素名", "code": "编码值"}, ...],
        "inactive": [{"name": "元素名", "code": "编码值"}, ...]
    }
    """
    soup = BeautifulSoup(xml_text, "xml.parser")
    parse_result = {"active": [], "inactive": []}

    # 遍历所有节点,不限制嵌套深度
    for node in soup.find_all():
        # 活性元素判定
        active_match = (
            node.name == "activeelementSubstance"
            or (node.name == "element" and node.get("classCode") == "ACTIM")
        )
        # 非活性元素判定
        inactive_match = (
            node.name == "inactiveelementSubstance"
            or (node.name == "element" and node.get("classCode") == "IACT")
        )

        if not active_match and not inactive_match:
            continue

        # 提取字段:如果你的XML内部名称/code标签名和默认值不一致,直接修改下面find的参数即可
        name_node = node.find(["name", "substanceName", "displayName"])
        code_node = node.find("code")
        ingredient_item = {
            "name": name_node.get_text(strip=True) if name_node else "",
            "code": code_node.get("code", "") if code_node else ""
        }

        if active_match:
            parse_result["active"].append(ingredient_item)
        else:
            parse_result["inactive"].append(ingredient_item)

    return parse_result

方案适配说明

  • 不依赖固定XML层级,不管节点嵌套多深都能正常命中,不会出现漏提取的问题
  • 规则扩展成本极低,如果后续新增其他标记规则的同类型XML,只需要在active_match/inactive_match的判断条件里追加对应规则即可,不需要重构整体解析逻辑
  • 解决了常规标签别名映射方案无法适配“独立标签标记/属性标记”两种完全异构结构的问题
  • 字段提取部分预留了常见标签兼容,可根据实际XML的内部字段命名快速调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:42:30