繁体   English   中英

Azure 逻辑应用程序 - xpath 为 xml,带命名空间前缀

[英]Azure Logic App - xpath for xml with namespace prefix

在我的逻辑应用程序中,我使用 xpath() function 来获取的值。 我尝试了不同的 xpath 但出现错误

'模板语言 function 'xpath' 参数无效:'xpath' 参数必须是受支持的、格式正确的 XPath 表达式。 请参阅https://aka.ms/logicexpressions#xpath了解使用详情。'。

我有以下 xml:

在此处输入图像描述

我努力了:

@xpath(xml(<YourMessage>), '/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]')
@xpath(xml(<YourMessage>), 'string(/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"])')

但得到同样的错误在此处输入图像描述

您可以使用以下表达式在xpath中包括名称空间:

@xpath(YOURBODY, '/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]')

我做了Johns-305的建议。

json(<Output>)['soap:Envelope']['soap:Body']

来晚了,但错误是因为你已经在设计器中转义了双引号(它会自动为你转义双引号)。

这是来自Azure Logic Apps and Power Automate 表达式函数的参考指南

重要的

如果您在代码视图中工作,请使用反斜杠字符 ( \ ) 转义双引号 ( " )。例如,将表达式序列化为 JSON 字符串时需要使用转义字符。但是,如果您在工作在逻辑应用设计器或表达式编辑器中,您不需要转义双引号,因为反斜杠字符会自动添加到基础定义中,例如:

代码视图: xpath(xml(body('Http')), '/*[name()=\"file\"]/*[name()=\"location\"]')

表达式编辑器: xpath(xml(body('Http')), '/*[name()="file"]/*[name()="location"]')

您最好转换为JSON并使用该格式的数据。 至少您可以通过这种方式摆脱所有愚蠢的名称空间的复杂性。

LogicApps在内部关注JSON,因此无论如何这样做都会更加“正确”。

您可以在以下位置找到示例: JSONPath-XPath for JSON

和评估者: JSONPath在线评估者

如果您需要的是内部节点之一的值,则可以尝试:

@xpath(<YourMessage>, 'string(/*[local-name()=\"Envelope\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[local-name()=\"Body\" and namespace-uri()=\"http://schemas.xmlsoap.org/soap/envelope/\"]/*[name()=\"SearchByABNv201408Response\"]/*[name()=\"ABRPayloadSearchResults\"]/*[name()=\"Request\"]/*[name()=\"identifierSearchRequest\"]/*[name()=\"authenticationGUID\"])')

我希望这可以为您指明正确的方向

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM