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

如何将XML字符串按不同Contract_key拆分为多组关联数据?

提取XML列中所有Contract数据的正确方法

你之前用split_part和strpos只能抓取第一个Contract的问题,核心原因是字符串拆分逻辑无法处理重复节点,直接使用XML解析函数就能搞定所有Contract的提取需求。

假设你使用的是PostgreSQL(支持XML解析功能),以下是修正后的查询代码:

SELECT
  aee.application_id,
  x.contract_key,
  x.outstanding_amount_r,
  x.average_monthly_instalment_amount
FROM stage_lt.cb_data_execution_entry_details deed
JOIN stage_lt.cb_data_execution_entry dee 
  ON deed.execution_entry_id = dee.id
JOIN stage_lt.cb_application_to_execution_entry aee 
  ON aee.execution_entry_id = deed.execution_entry_id
-- 将转义的XML字符串转换为可解析的XML类型,遍历所有Contract节点
CROSS JOIN xmltable(
  '/Root/Contracts/Contract'  -- 请替换为你实际XML结构中的Contract节点路径
  PASSING xml(decode(dee.response_body, 'HTML'))
  COLUMNS
    contract_key TEXT PATH '@key',
    outstanding_amount_r NUMERIC PATH 'OutstandingAmountR',
    average_monthly_instalment_amount NUMERIC PATH 'AverageMonthlyInstalmentAmount'
) x
WHERE dee.provider_name = 'cb'
  AND aee.application_id = '2253545';

关键说明:

  • 用XML解析替代字符串拆分:xmltable函数会自动遍历XML中所有匹配的Contract节点,每个节点生成一行数据,完美解决多Contract提取的问题。
  • 处理转义字符:你的response_body中存在<、"这类HTML转义符,必须通过decode(..., 'HTML')转换为正常的XML标签和引号,否则XML解析会报错。
  • 调整节点路径:/Root/Contracts/Contract是示例路径,需要根据你实际的XML结构进行修改(比如Contract直接在根节点下,就写/Contract)。

原方法仅能获取首个Contract的原因:

split_part只会返回第一个分隔符后的内容,无法识别后续存在的其他Contract节点,因此只能拿到第一组匹配数据。而XML解析是从结构层面处理数据,能完整遍历所有重复节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:20:28