如何在Azure Data Factory中读取XML元素存入变量用于后续API调用
方案1:无需落地XML的最优实现(推荐)
可以跳过将XML保存到Data Lake的步骤,直接在管道内处理响应,减少存储IO开销,流程如下:
- 第一步:用Web活动直接调用登录API,获取XML格式响应
- 第二步:使用ADF内置的
xpath函数直接从Web活动输出中提取所需字段,针对你提供的带命名空间的XML,推荐用local-name()绕过命名空间配置,三个目标字段的提取写法示例:- 提取所有sp节点的id属性:
xpath(xml(activity('调用登录接口的Web活动名称').output), '//*[local-name()="sp"]/@id') - 提取对应sp下的mac_add字段值:
xpath(xml(activity('调用登录接口的Web活动名称').output), '//*[local-name()="sp"]/*[local-name()="mac_add"]/text()') - 提取对应sp下的interface字段值:
xpath(xml(activity('调用登录接口的Web活动名称').output), '//*[local-name()="sp"]/*[local-name()="id"]/*[local-name()="interface"]/text()')
- 提取所有sp节点的id属性:
- 第三步:如果存在多个sp节点需要逐个处理,直接将xpath返回的数组作为ForEach活动的输入项,循环内每一轮获取当前的sp id、mac_add、interface参数,直接作为入参传给调用下一个API的Web活动即可。
方案2:XML已存入Data Lake的提取方法
如果你需要保留现有存储XML的流程,可以用以下方法提取字段:
- 第一步:新增Lookup活动,数据源选择你存储在Data Lake中的XML文件,对应数据集选择XML格式,在数据集的解析配置中指定解析层级到sp节点,勾选「返回所有行」即可一次性拿到所有结构化的目标字段
- 第二步:Lookup活动运行完成后,通过
@activity('Lookup活动名称').output.value即可获取包含所有sp id、mac_add、interface字段的数组,可直接赋值给管道变量,或者传入ForEach活动循环调用后续API。
补充说明
- 单个sp节点下存在多个interface值时,xpath会返回数组格式,你可以根据业务需要按索引取指定值,或者全部遍历处理
- 提取的字段需要类型转换时,直接用
int()、string()等内置函数包裹即可
内容的提问来源于stack exchange,提问作者heena shaikh
相关产品推荐
相关产品推荐

