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

问题描述 投票:0回答:6

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

'模板语言函数'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/\"])')

但遇到同样的错误

azure-logic-apps
6个回答
2
投票

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

LogicApps 内部以 JSON 为重点,因此无论如何这样做会稍微更“正确”。

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

还有评估器:JSONPath 在线评估器


2
投票

您可以使用以下表达式将命名空间包含在您的 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/\"]')

1
投票

我按照 Johns-305 的建议做了。

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

1
投票

这么晚了,但错误是因为您在设计器中转义了双引号(它会自动为您转义双引号)。

这来自Azure 逻辑应用和 Power Automate 的表达式函数参考指南

重要

如果您在代码视图中工作,请使用反斜杠字符 (

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

代码查看:

xpath(xml(body('Http')), '/*[name()=\"file\"]/*[name()=\"location\"]')

表达式编辑器:

xpath(xml(body('Http')), '/*[name()="file"]/*[name()="location"]')


0
投票

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

@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\"])')

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


0
投票

您实际上并不需要在门户编辑器中对“字符进行转义,您可以简单地像这样放置xpath:

xpath(xml(body('Transform_XML')), '/*[local-name()="root" and namespace-uri()=""]/*[local-name()="X12_00401_210" and namespace-uri()="http://schemas.microsoft.com/BizTalk/EDI/X12/2006"]')
© www.soinside.com 2019 - 2024. All rights reserved.