【问题标题】:Azure Logic App - xpath for xml with namespace prefixAzure 逻辑应用程序 - 带有命名空间前缀的 xml 的 xpath
【发布时间】:2018-04-30 22:59:17
【问题描述】:

在我的逻辑应用程序中,我使用 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


    【解决方案1】:

    你可以使用这个表达式在你的 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/\"]')
    

    【讨论】:

    • 我遇到了同样的错误。看看截图
    【解决方案2】:

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

    LogicApps 在内部以 JSON 为中心,因此无论如何这样做会更“正确”。

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

    还有一位评估员:JSONPath Online Evaluator

    【讨论】:

    • 你有机会发布一个例子吗?我对 LogicApps 比较陌生
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 我遇到了同样的错误。看看截图
      【解决方案5】:

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

      这是来自Reference guide to expression functions for Azure Logic Apps and Power Automate

      重要

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 2015-01-15
        • 2015-06-05
        • 1970-01-01
        • 2021-07-27
        • 2020-06-08
        • 2011-01-05
        相关资源
        最近更新 更多