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

Snowflake中XMLGET返回NULL问题(XML数据确认无误)

Snowflake XMLGET返回NULL的解决办法

问题根源

你使用XMLGET(section.value, '$')是想提取<section>节点的直接文本,但从提供的XML片段来看,<section>的内容都是嵌套的子节点(比如<speaker>、<plist>、<p>),没有直接的文本内容,所以这个函数返回NULL。

可行解决方案

1. 获取section下的全部内容(含子节点)

如果需要拿到<section>节点里的所有内容,用XMLSERIALIZE序列化节点即可:

SELECT
    t.id AS transcript_id,
    section.index AS section,
    XMLSERIALIZE(CONTENT section.value AS VARCHAR) AS section_content
FROM FACTSET_OPEN_ACCESS__RD.TRANSCRIPTS.TRANSCRIPTS_OPEN t,
    LATERAL FLATTEN(input => XMLGET(t.raw_xml, 'body'), path => 'section') section
WHERE t.id = 2676505;

2. 提取指定子节点的文本

如果只需要<p>标签里的文本内容,可以逐层定位子节点:

SELECT
    t.id AS transcript_id,
    section.index AS section,
    XMLGET(XMLGET(XMLGET(section.value, 'speaker'), 'plist'), 'p')::string AS section_content
FROM FACTSET_OPEN_ACCESS__RD.TRANSCRIPTS.TRANSCRIPTS_OPEN t,
    LATERAL FLATTEN(input => XMLGET(t.raw_xml, 'body'), path => 'section') section
WHERE t.id = 2676505;

3. 用XMLPATH直接定位文本

也可以通过XML路径表达式直接提取目标文本:

SELECT
    t.id AS transcript_id,
    section.index AS section,
    XMLPATH(t.raw_xml, '/body/section/speaker/plist/p/text()')::string AS section_content
FROM FACTSET_OPEN_ACCESS__RD.TRANSCRIPTS.TRANSCRIPTS_OPEN t,
    LATERAL FLATTEN(input => XMLGET(t.raw_xml, 'body'), path => 'section') section
WHERE t.id = 2676505;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:35:08