从Azure逻辑应用程序操作中的Envolope请求中提取SOAP主体

mjqavswn  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(115)

我有一个逻辑应用程序(LA),它有一个http触发器。我向LA发送一个类似于下面的SOAP请求:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"></SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <tns:Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:tns="http://test.com">
      <name>AAAA</name>
      <id>1234</id>
      <OrderType>new</OrderType>
    </tns:Order>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

字符串
我想在LA中创建另一个动作,将信封体提取给我。我只想得到这个:

<tns:Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tns="http://test.com">
    <name>AAAA</name>
    <id>1234</id>
    <OrderType>new</OrderType>
</tns:Order>


我尝试了一个具有以下功能的合成操作:

xpath(triggerBody(), '/*[local-name()=''Envelope'']/*[local-name()=''Body'']/*[local-name=''Order'']')


你可以在这里看到:

的数据
但这对我来说是一个错误:


有什么办法解决这个问题吗?我已经尝试删除所有的名称空间,它似乎是工作,但不是当有名称空间

z4iuyo4d

z4iuyo4d1#

您的null问题有点令人困惑,我很难破译和修复,因为收到该错误告诉我您没有完全正确地阅读传入的请求(或其他内容),但是,如果我将XML加载到变量中,然后提取tns:Order的内容,我可以让它工作,并且这种方法不需要您使用完全限定的方法遍历层次结构。

流量


的数据
这是第二步中的表达式。。
first(xpath(xml(variables('XML')), '//*[local-name()="Order"]'))

结果


3b6akqbq

3b6akqbq2#

我已经在我的环境中复制了,并得到了预期的结果如下:

一月一日

json(xml(triggerBody()))

字符串


的数据
然后使用outputs('Compose')['SOAP-ENV:Envelope']['SOAP-ENV:Body']['tns:Order']


Output:


CodeView:

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@json(xml(triggerBody()))",
                "runAfter": {},
                "type": "Compose"
            },
            "Compose_2": {
                "inputs": "@outputs('Compose')['SOAP-ENV:Envelope']['SOAP-ENV:Body']['tns:Order']",
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}

Edit:

如果你想以xml格式输出:
xml(outputs('Compose_2'))


Output:


Codeview:

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@json(xml(triggerBody()))",
                "runAfter": {},
                "type": "Compose"
            },
            "Compose_2": {
                "inputs": "@outputs('Compose')['SOAP-ENV:Envelope']['SOAP-ENV:Body']",
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Compose_3": {
                "inputs": "@xml(outputs('Compose_2'))",
                "runAfter": {
                    "Compose_2": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}

相关问题