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

如何解析XML内部嵌套数据?附含CDATA区块的record标签示例

解析该嵌套XML记录的方法

该XML为双层嵌套结构:外层是custom.model的业务记录,email_body字段通过CDATA包裹了第二层业务XML数据,避免内层标签被外层解析器误处理,解析可按以下步骤进行:

步骤1:解析外层XML

直接使用通用XML解析库处理外层结构即可,需要注意你提供的示例中外层<record>的model属性缺少闭合引号,实际解析前要先修正语法问题,避免解析报错。

以Python的xml.etree.ElementTree为例:

import xml.etree.ElementTree as ET

# 加载外层XML内容
outer_xml = """你的完整XML字符串"""
root = ET.fromstring(outer_xml)

# 提取外层普通字段
record_id = root.attrib.get("id")
model = root.attrib.get("model")
name = root.find("field[@name='name']").text
email_from = root.find("field[@name='email_from']").text
# 其他外层字段按照相同逻辑提取即可

步骤2:解析CDATA中的内层XML

提取到email_body字段的内容后,CDATA包裹的内容本身就是格式完整的XML,直接将其作为新的XML对象解析即可:

# 提取email_body的CDATA内容
email_body_content = root.find("field[@name='email_body']").text.strip()
# 解析内层XML
inner_root = ET.fromstring(email_body_content)

# 提取内层业务字段
process = inner_root.find("field[@name='process']").text
target_model = inner_root.find("field[@name='model']").text
company_name = inner_root.find("field[@name='name']").text
currency_id = inner_root.find("field[@name='currency_id']").text

注意事项

  • CDATA本身的作用就是避免内层XML标签被转义,无需手动处理内容中的尖括号,直接提取内容解析即可
  • 若CDATA内容前后存在多余空白或换行,解析前调用strip()处理即可避免解析异常
  • 如果该XML是Odoo框架中的数据记录,可直接使用Odoo自带的odoo.tools.convert.parse_record工具解析,框架会自动处理嵌套的XML结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:09:00