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

时间:2019-09-25 06:13:23

标签: azure-functions azure-logic-apps

  1. 我的Logic App从FTP服务器位置正在获取zip文件夹,该文件夹可以包含号。样本结构的xml文件

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

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>

1 个答案:

答案 0 :(得分:0)

由于您要合并多个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”用于判断每个变量是否是第一个循环)。 enter image description here

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

接下来,我用“ order_id”设置变量值(在这一步中,您可能需要设置其他一些变量,例如“ username”,“ user_first_name” .....) enter image description here

下一步,我创建一个“ if”条件来执行其他工作。 enter image description here

在“对于每个”循环的底部,我们需要将变量“ isFirstTime”设置为false。 enter image description here

完成“对于每个”循环之后,我们有最后两个步骤。 enter image description here “ 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"
        }
      }
    ]
  }
}

顺便说一句,我们最好先做一些设置,然后再使用“对于每个”循环,单击“对于每个”操作旁边的“ ...”图标->单击“设置”,然后启用“并发控制” ”,并将“并行度”更改为1。 enter image description here enter image description here