【问题标题】:Logic apps - Read XML response from web service and store parsed data in a database逻辑应用程序 - 从 Web 服务读取 XML 响应并将解析的数据存储在数据库中
【发布时间】:2019-04-02 01:49:12
【问题描述】:

我正在尝试使用 Logic Apps 来完成我过去使用 Pentaho 所做的事情。我想构建一个带有 Recurrence 触发器的逻辑应用程序,它启动一个 HTTP 步骤以发布到 Web 服务并接收 XML 回复。我想解析那个 XML 回复(已知格式)并将结果存储在 Azure SQL Server 数据库中。

我已经成功测试了 HTTP 步骤并收到了回复 XML。我在 SQL 数据库中完成了目标表。我不知道如何使用逻辑应用程序将 XML 回复解析为类似 CSV 格式的内容,我可以将其传递给 SQL 查询以输入新的表行。

我浏览了几个教程和其他线程,但这些步骤要么假设我拥有比我拥有的更高水平的经验,要么是逻辑应用程序的非常基本的介绍。

我认为听到以下内容会有所帮助:

  1. 这是否比我预期的更具挑战性?我擅长使用 SQL、Pentaho、R 和其他工具,但对 HTTP 调用/响应有些陌生,并且对 XML 的经验很少。

  2. 我应该考虑哪些 Logic Flow 连接器,它们是免费产品的一部分,还是某些付费包的一部分?

在此先感谢您在入门方面的任何帮助。

【问题讨论】:

    标签: sql-server xml azure-logic-apps


    【解决方案1】:

    如果您在解析之后将 XML 转换为 JSON 对象,那么它会简单得多。这两者都可以通过使用xmljson 函数来完成。

    此外,由于您知道 XML 的格式,因此您将知道转换后的 JSON 的格式,并让您使用 Parse JSON 操作来获取简单的令牌以在逻辑应用的其余部分中使用。

    然后您可以直接在 SQL 查询中使用这些标记。

    这是一个逻辑应用程序,展示了这种情况(没有 SQL 和 HTTP 步骤)

    及其定义要明确

    {
        "definition": {
            "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
            "actions": {
                "CSV_Data": {
                    "inputs": {
                        "variables": [
                            {
                                "name": "random_data_csv",
                                "type": "String",
                                "value": "@{body('Parse_JSON')?['data']?['name']},@{body('Parse_JSON')?['data']?['awesome']}"
                            }
                        ]
                    },
                    "runAfter": {
                        "Parse_JSON": [
                            "Succeeded"
                        ]
                    },
                    "type": "InitializeVariable"
                },
                "Parse_JSON": {
                    "inputs": {
                        "content": "@json(xml(variables('random_data_xml')))",
                        "schema": {
                            "properties": {
                                "data": {
                                    "properties": {
                                        "awesome": {
                                            "type": "string"
                                        },
                                        "name": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    },
                    "runAfter": {
                        "XML_Data": [
                            "Succeeded"
                        ]
                    },
                    "type": "ParseJson"
                },
                "XML_Data": {
                    "inputs": {
                        "variables": [
                            {
                                "name": "random_data_xml",
                                "type": "String",
                                "value": "<data>\n<name>Azure Logic Apps</name>\n<awesome>true</awesome>\n</data>"
                            }
                        ]
                    },
                    "runAfter": {},
                    "type": "InitializeVariable"
                }
            },
            "contentVersion": "1.0.0.0",
            "outputs": {},
            "parameters": {},
            "triggers": {
                "manual": {
                    "inputs": {
                        "schema": {}
                    },
                    "kind": "Http",
                    "type": "Request"
                }
            }
        }
    }
    

    【讨论】:

    • 感谢@PramodValavala-MSFT。感谢您的描述,我取得了一些进展。我目前对 Parse JSON 步骤感到困惑,因为我无法将 XML 作为上一步中的变量传递给 JSON 函数。这就是我尝试这样做的方式,尽管我尝试过与 等的其他组合 - 我关闭了吗:imgur.com/a/WbUQ6Os
    • jsonxml 函数在尝试从一个转换到另一个时都需要对象。所以你必须改为json(xml('xml_from_http'))。基本上,您正在将 xml 字符串转换为各种 xml 对象,然后再将其转换为 json 对象。
    • 对不起,如果我太厚了。我尝试了 json(xml('xml_from_http')),而不是 json('xml_from_http')。运行作业时出现以下错误。我的预感是我试图不正确地使用“xml_from_http”。 “InvalidTemplate。无法在“1”行和“2408”列的“Parse_JSON”输入操作中处理模板语言表达式:“模板语言函数“xml”参数无效。提供的值无法转换为 XML:“数据在根级别无效。第 1 行,位置 1。'。有关使用详细信息,请参阅aka.ms/logicexpressions#xml。'。 imgur.com/a/8HFhlic
    • 实际上必须是json(xml(variables('xml_from_http')))。之前错过了。您只是使用字符串而不是变量中的值,因此会出现错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多