Logic Apps中XPath函数无法获取XML对象变量的元素名
在Azure Logic Apps中使用XPath获取XML元素名称的解决方案
核心问题分析
你遇到的问题主要源于两点:
- 存储XML的变量是对象类型(包含
$content-type和$content属性),而非直接的XML节点,导致xpath()函数无法正确解析XML结构。 - Logic Apps的
xpath()函数返回的是节点集合,无法直接通过XPath表达式返回字符串数组,需要结合遍历操作提取名称。
解决方案步骤
1. 转换XML对象为可解析的XML节点
如果你的testXML变量是对象类型(比如从HTTP请求、Blob存储等环节返回的XML对象),需要先提取$content字段中的XML字符串,再用xml()函数转换为可被xpath()解析的XML节点:
xml(variables('testXML')['$content'])
2. 结合XPath与map()提取元素名称
先用xpath()选中root下的所有子元素,再通过map()函数遍历每个节点,提取对应元素的名称:
map(xpath(xml(variables('testXML')['$content']), '/root/*'), item() => string(xpath(item(), 'name(.)')))
执行该表达式后,会直接返回你需要的元素名字符串数组:
["assetRegistration", "assetName", "assetId", "driverId", "driverName", "driverGroupId", "driverGroupName", "assetGroupId", "assetGroupName"]
对之前失败表达式的说明
- 直接使用
xpath(variables('testXML'), '//*/*[name()]'):因为变量是对象而非XML节点,xpath()函数会解析对象的属性($content-type和$content),而非实际XML内容。 - 使用
name(/root/*)这类表达式:XPath 1.0中该表达式仅返回第一个匹配元素的名称,且未处理对象到XML节点的转换,因此返回空或不符合预期的结果。 - 在线工具可用是因为它们直接处理纯XML字符串,无需适配Logic Apps特有的对象包装结构。
内容的提问来源于stack exchange,提问作者Christopher Page
相关产品推荐
相关产品推荐

