LogicApp中XPath表达式无效及无法获取XML值问题求助
Azure Logic Apps XML解析问题解决方案
问题背景
在Logic Apps中解析WebService返回的XML响应,目标是基于元素属性el="el7"提取值33。在XPath测试工具中//infoRef[@el = "el7"]和//*[@el='el7']均正常工作,但Logic Apps中出现以下问题:
- Expression_A:
xpath(xml(outputs('Compose')),'//infoRef[@el = "el7"]')返回编码后的XML内容,而非目标值33; - Expression_B:
xpath(xml(outputs('Compose')),'//*[@el='el7']')无法保存,提示表达式无效,转义单引号也未解决。
附精简XML示例:
<?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <infoRef el="el7" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">33</infoRef> </soapenv:Body> </soapenv:Envelope>
解决方案
1. 解决Expression_A返回XML节点而非文本值的问题
原XPath仅选中了<infoRef>元素节点,需在XPath末尾添加/text()明确获取元素的文本内容,同时优化引号转义方式:
- 方式1:用单引号包裹XPath,内部直接使用双引号,无需转义
xpath(xml(outputs('Compose')),'//infoRef[@el = "el7"]/text()')
- 方式2:用双引号包裹XPath,内部双引号转义为
"
xpath(xml(outputs('Compose')),'//infoRef[@el = "el7"]/text()')
2. 解决Expression_B表达式无效的问题
原表达式存在单引号冲突(XPath字符串用单引号包裹时,内部单引号未正确转义)。在Logic Apps中,单引号的转义规则是使用两个连续单引号'',同时添加/text()获取文本值:
- 方式1:单引号转义版本
xpath(xml(outputs('Compose')),'//*[@el=''el7'']/text()')
- 方式2:改用双引号避免转义
xpath(xml(outputs('Compose')),'//*[@el = "el7"]/text()')
内容的提问来源于stack exchange,提问作者WebTester
相关产品推荐
相关产品推荐

