在逻辑应用程序中将相同结构的多个 XML 文件合并为单个 xml

Merge multiple XML files of same structure into single xml in logic apps

  1. 从 FTP 服务器位置我的逻辑应用程序正在获取 zip 文件夹,其中容器 包含 "N" 没有。 xml 个样本结构文件

  2. 我可以在 for-each 循环中读取 xml 文件的内容,方法是将它们解析为 JSON

3。现在,我希望我的逻辑应用程序将 JSON 中的多个 xml 文件合并为单个 xml 文件

请建议我如何实施上述第 3 点。 我有集成帐户来存储映射文件。

输入文件 1:-

 <?xml version="1.0"?>
<orderQuote>
    <order_id>AZS000001</order_id>
    <user_request>
        <app_user>
            <username>varunxxxxxxxxxxxx</username>
            <user_first_name>Varun</user_first_name>
            <user_last_name>Thakur</user_last_name>
            <user_email>varunthakur84@hotmail.com</user_email>          
        </app_user>

    </user_request>

    <quote_id>345678</quote_id>
    <rate_id>ABC001</rate_id>
  <contract_id>SR_ABC_XYZ</contract_id>
    <amendment_id>2019062401</amendment_id>
    <price> 10</price>
  <rate_effective_date>01-Jul-2019</rate_effective_date>
    <rate_expiration_date>30-Sep-2019</rate_expiration_date>
    <origin_trade></origin_trade>
    <destination_trade></destination_trade>
    <origin_city>Haiphong</origin_city>
    <origin_country>VIETNAM</origin_country>
    <destination_city>Atlanta</destination_city>
    <destination_country>USA</destination_country>
    <ordermentType>XYZ</ordermentType>
    <ordermentSize>XYZ</ordermentSize>
    <ordermentSizeType>DC</ordermentSizeType>
    <currency>USD</currency>
    <order_dt>17-Sep-2019</order_dt>
    <customer>CompanyName RM Team</customer>
    <quote_creation_dt>17-Sep-2019</quote_creation_dt>

</orderQuote>

输入文件 2:-

 <?xml version="1.0"?>
<orderQuote>
    <order_id>AZS000001</order_id>
    <user_request>
        <app_user>
            <username>varunxxxxxxxxxxxx</username>
            <user_first_name>Varun</user_first_name>
            <user_last_name>Thakur</user_last_name>
            <user_email>varunthakur84@hotmail.com</user_email>          
        </app_user>

    </user_request>

    <quote_id>8975545</quote_id>
    <rate_id>ABC002</rate_id>
  <contract_id>SR_A83Z</contract_id>
    <amendment_id>20134362401</amendment_id>
  <price>60</price>
  <rate_effective_date>01-JAJ-2019</rate_effective_date>
    <rate_expiration_date>30-DEC-2019</rate_expiration_date>
    <origin_trade></origin_trade>
    <destination_trade></destination_trade>
    <origin_city>Haiphong</origin_city>
    <origin_country>VIETNAM</origin_country>
    <destination_city>Atlanta</destination_city>
    <destination_country>USA</destination_country>
    <ordermentType>XYZ</ordermentType>
    <ordermentSize>XYZ</ordermentSize>
    <ordermentSizeType>DC</ordermentSizeType>
    <currency>USD</currency>
    <order_dt>17-Sep-2019</order_dt>
    <customer>CompanyName RM Team</customer>
    <quote_creation_dt>17-Sep-2019</quote_creation_dt>

</orderQuote>

预期输出文件

 <?xml version="1.0"?>
<orderQuote>
  <order_id>AZS000001</order_id>
  <user_request>
    <app_user>
      <username>varunxxxxxxxxxxxx</username>
      <user_first_name>Varun</user_first_name>
      <user_last_name>Thakur</user_last_name>
      <user_email>varunthakur84@hotmail.com</user_email>
    </app_user>

  </user_request>

  <quotationCollection>
    <quotation>
      <quote_id>8975545</quote_id>
      <rate_id>ABC002</rate_id>
      <contract_id>SR_A83Z</contract_id>
      <amendment_id>20134362401</amendment_id>
      <price>60</price>
      <rate_effective_date>01-JAJ-2019</rate_effective_date>
      <rate_expiration_date>30-DEC-2019</rate_expiration_date>
      <origin_trade></origin_trade>
      <destination_trade></destination_trade>
      <origin_city>Haiphong</origin_city>
      <origin_country>VIETNAM</origin_country>
      <destination_city>Atlanta</destination_city>
      <destination_country>USA</destination_country>
      <ordermentType>XYZ</ordermentType>
      <ordermentSize>XYZ</ordermentSize>
      <ordermentSizeType>DC</ordermentSizeType>
      <currency>USD</currency>
      <order_dt>17-Sep-2019</order_dt>
      <customer>CompanyName RM Team</customer>
      <quote_creation_dt>17-Sep-2019</quote_creation_dt>
    </quotation>
    <quotation>
      <quote_id>345678</quote_id>
      <rate_id>ABC001</rate_id>
      <contract_id>SR_ABC_XYZ</contract_id>
      <amendment_id>2019062401</amendment_id>
      <price> 10</price>
      <rate_effective_date>01-Jul-2019</rate_effective_date>
      <rate_expiration_date>30-Sep-2019</rate_expiration_date>
      <origin_trade></origin_trade>
      <destination_trade></destination_trade>
      <origin_city>Haiphong</origin_city>
      <origin_country>VIETNAM</origin_country>
      <destination_city>Atlanta</destination_city>
      <destination_country>USA</destination_country>
      <ordermentType>XYZ</ordermentType>
      <ordermentSize>XYZ</ordermentSize>
      <ordermentSizeType>DC</ordermentSizeType>
      <currency>USD</currency>
      <order_dt>17-Sep-2019</order_dt>
      <customer>CompanyName RM Team</customer>
      <quote_creation_dt>17-Sep-2019</quote_creation_dt>
    </quotation>
  </quotationCollection>
</orderQuote>

由于你想合并多个xml(json)个文件的部分内容,你的例子比较复杂,所以我简化了。

您的要求等同于合并 xml 文件

<orderQuote>
    <order_id>AZS000001</order_id>
    <quote_id>345678</quote_id>
    <rate_id>ABC001</rate_id>
</orderQuote>

<orderQuote>
    <order_id>AZS000001</order_id>
    <quote_id>8975545</quote_id>
    <rate_id>ABC002</rate_id>
</orderQuote>

<orderQuote>
  <order_id>AZS000001</order_id>

  <quotationCollection>
    <quotation>
      <quote_id>8975545</quote_id>
      <rate_id>ABC002</rate_id>
    </quotation>
    <quotation>
      <quote_id>345678</quote_id>
      <rate_id>ABC001</rate_id>
    </quotation>
  </quotationCollection>
</orderQuote>

针对这个需求,我先初始化了四个变量(变量"isFirstTime"用来判断是否是for each的第一个循环)。

然后我连接到 ftp 并将 xml 文件从 ftp 解析为 json 格式。

接下来,我将变量值设置为"order_id"(在这一步中,您可能需要设置一些其他变量,例如"username"、"user_first_name".......)

下一步,我创建一个 "if" 条件来完成不同的工作。

在"For each" 循环的底部,我们需要将变量"isFirstTime" 设置为false。

完成"For each"循环后,我们还有最后两步。 "fx concat(...)"的表达式为

concat(concat(concat(concat('{"orderQuote":{"order_id":"', variables('order_id')), '","quotationCollection":['), variables('jsonstring')), ']}}')

之后,我们可以得到json格式的结果文件

{
  "orderQuote": {
    "order_id": "AZS000001",
    "quotationCollection": [
      {
        "quotation": {
          "quote_id": "345678",
          "rate_id": "ABC001"
        }
      },
      {
        "quotation": {
          "quote_id": "8975545",
          "rate_id": "ABC002"
        }
      }
    ]
  }
}

对了,我们在使用"For each"循环之前最好做一些设置,点击"For each"动作旁边的“…”图标-->点击"Settings"然后启用 "Concurrency Control" 并将 "Degree of Parallelism" 更改为 1。