Объединение нескольких файлов XML одной и той же структуры в один XML-файл в логических приложениях - PullRequest
1 голос
/ 25 сентября 2019
  1. С местоположения сервера FTP мое приложение логики извлекает zip-папку, которая может содержать контейнер , содержащий "N" нет.XML-файлов образца структуры

  2. Я могу читать содержимое XML-файлов в цикле for-each, анализируя их в JSON

3.Теперь я хочу, чтобы мое приложение логики объединяло несколько XML-файлов в JSON в один 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 голосов
/ 26 сентября 2019

Поскольку вы хотите объединить часть содержимого нескольких файлов 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

Следующим шагом я создаю условие «если» для выполнения другой работы.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

...