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

Azure Logic App:遍历XML的For-Each循环未执行的原因排查

问题原因及解决方案

核心问题1:未正确解码Base64编码的XML内容

你直接将variables('Body')传入xml()函数,但HTTP返回的body里的$content是Base64编码的字符串,必须先解码为纯XML字符串才能转换为XML对象,否则无法解析出正确的节点结构。

核心问题2:XPath表达式与节点上下文不匹配

  • 第一层循环的XPathEnumerationResults/Blobs返回的是<Blobs>节点集合,进入第二层循环时,当前上下文已经是<Blobs>节点,你却用Blobs/Blob查找,相当于在<Blobs>节点下找子节点<Blobs>再找<Blob>,完全不符合实际XML结构,自然找不到任何节点。
  • 额外问题:两层嵌套循环完全没必要,直接用XPath一次性定位所有<Blob>节点即可。

正确实现步骤

  1. 解码并转换XML:先将Base64内容解码为字符串,再转为XML对象,表达式示例:

    xml(base64ToString(body('HTTP')['$content']))
    

    若已将HTTP返回内容存入变量,替换为对应变量中存储的$content值即可。

  2. 直接获取所有Blob节点:使用单个For-Each循环,循环的表达式改为:

    xpath(xml(base64ToString(body('HTTP')['$content'])), '/EnumerationResults/Blobs/Blob')
    

    若需全局匹配,也可使用//EnumerationResults/Blobs/Blob。

  3. 循环内获取属性:在For-Each循环内部,获取Name和Last-Modified的表达式示例:

    • 获取Name:
      xpath(items('For_each'), 'string(./Name)')
      
    • 获取Last-Modified:
      xpath(items('For_each'), 'string(./Properties/Last-Modified)')
      

额外注意点

如果Blob存储返回的XML带有默认命名空间(比如xmlns="http://schemas.microsoft.com/windowsazure/2010/08/container"),XPath需要处理命名空间才能找到节点,可改用以下表达式:

xpath(xml(base64ToString(body('HTTP')['$content'])), '//*[local-name()="EnumerationResults"]/*[local-name()="Blobs"]/*[local-name()="Blob"]')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:17:36