如何在ADF中从Web活动输出的XML提取所有Name值?
Azure Data Factory提取XML中所有Name值到数组变量
问题场景
Web活动返回如下格式的输出,其中Response字段为XML字符串:
{ "Response": "<?xml version = 'xyz'?> <Head> <Blobs> <Blob> <Name>Max</Name> <location>USA</location> </Blob> <Blob> <Name>Robert</Name> <location>UK</location> </Blob> <Blob> <Name>Nick</Name> <location>USA</location> </Blob> </Blobs> </Head>", "Json1": { "Json1_1": "value", "Json1_1": "value", "Json1_1": "value" }, "Json2": "value", "Json3": 0, "Json4": { "json4_1": 0 } }
需要提取XML中所有<Name>节点的值到数组类型变量,但使用表达式@xpath(xml(activity('Web1').output.Response), 'string(//Name)')仅返回第一个Name值(Max),无法满足需求。
解决方案
使用xpath获取所有匹配的节点集合,再通过map函数将每个节点转换为文本值,最终生成数组:
正确表达式
@map(xpath(xml(activity('Web1').output.Response), '//Name'), function(x) { string(x) })
逻辑说明
xml(activity('Web1').output.Response):将Response字段的XML字符串转换为XML对象xpath(..., '//Name'):查询所有匹配<Name>的节点,返回节点集合map(..., function(x) { string(x) }):遍历节点集合,将每个节点转换为对应的文本值,生成包含所有Name值的数组
执行结果
设置变量类型为数组后,执行Set Variable活动将得到数组:["Max", "Robert", "Nick"]
内容的提问来源于stack exchange,提问作者pikapika
相关产品推荐
相关产品推荐

