Logic Apps中XPath提取BOMessage返回编码结果的解决方法求助
解决Logic Apps提取XML中BOMessage元素返回Base64编码的问题
问题场景
原始XML内容:
<?xml version="1.0" encoding="UTF-8"?> <part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="payload"> <process xmlns="http://xmlns.oracle.com/CommonBaswareHTTPWrapperProvider/CommonBasware_HTTPWrapperProviderBPEL"> <BaswareRequest xmlns="http://xmlns.oracle.com/CommonBaswareHTTPWrapperProvider/BaswareRequest"> <BOName>yy</BOName> <FileName>xx.xml</FileName> <Action>SEND</Action> <BOMessage> <DocumentElement xmlns=""> <Item> <Text_1>123</Text_1> <Text_2>123 CIO Office HOF</Text_2> <Text_3>SWEDEN</Text_3> <Text_4>3650</Text_4> <Text_5>SWEDEN</Text_5> <Text_6>True</Text_6> <Text_EN /> <Active>True</Active> <Company>001</Company> </Item> </DocumentElement> </BOMessage> </BaswareRequest> </process> </part>
需求是提取<BOMessage>元素及其全部内容,在Logic Apps的Compose动作中使用了以下表达式:
xpath(xml(triggerBody()), '//*[local-name()="BOMessage"]')
但返回结果是包含Base64编码内容的对象数组:
[ { "$content-type": "application/xml;charset=utf-8", "$content": "PEJPTWVzc2FnZSB4bWxucz0iaHR0cDovL3htbG5zLm9yYWNsZS5jb20vQ29tbW9uQmFzd2FyZUhUVFBXcmFwcGVyUHJvdmlkZXIvQmFzd2FyZVJlcXVlc3QiPg0KICAgICAgICAgICAgICAgIDxEb2N1bWVudEVsZW1lbnQgeG1sbnM9IiI+DQogICAgICAgICAgICAgICAgICAgIDxJdGVtPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfMT4xMjM8L1RleHRfMT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0XzI+MTIzIENJTyBPZmZpY2UgSE9GPC9UZXh0XzI+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF8zPlNXRURFTjwvVGV4dF8zPg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfND4zNjUwPC9UZXh0XzQ+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF81PlNXRURFTjwvVGV4dF81Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRfNj5UcnVlPC9UZXh0XzY+DQogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dF9FTiAvPg0KICAgICAgICAgICAgICAgICAgICAgICAgPEFjdGl2ZT5UcnVlPC9BY3RpdmU+DQogICAgICAgICAgICAgICAgICAgICAgICA8Q29tcGFueT4wMDE8L0NvbXBhbnk+DQogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4NCiAgICAgICAgICAgICAgICA8L0RvY3VtZW50RWxlbWVudD4NCiAgICAgICAgICAgIDwvQk9NZXNzYWdlPg==" } ]
尝试用xml()、base64ToString()、decodeBase64()直接包裹XPath表达式均报错。
解决方案
核心原因
Logic Apps中xpath()函数返回的是XML节点对象数组,当直接输出时会自动序列化为包含Base64编码内容的JSON结构,而非原始XML字符串。
正确表达式
1. 提取BOMessage的XML字符串
如果需要获取<BOMessage>的原始XML字符串,使用以下表达式:
string(xpath(xml(triggerBody()), '//*[local-name()="BOMessage"]')[0])
xpath(...)返回节点数组,[0]取第一个匹配的节点string()将XML节点转换为对应的XML字符串
2. 转换为可操作的XML对象(供后续流程使用)
如果需要将提取的内容转为Logic Apps可直接操作的XML对象,再嵌套xml()函数:
xml(string(xpath(xml(triggerBody()), '//*[local-name()="BOMessage"]')[0]))
为什么之前的尝试失败?
- 直接用
xml(xpath(...)):xpath()返回的是节点数组,不是字符串,xml()函数仅接受字符串输入,因此报错 - 直接用
base64ToString(xpath(...)):xpath()返回的是对象数组,不是单纯的Base64字符串,无法直接解码
内容的提问来源于stack exchange,提问作者ibda
相关产品推荐
相关产品推荐

