Например, есть два XML файла, данные которых нужно преобразовать в третий:
XML-файл 1:
document001.xml
<?xml version="1.0"?>
<ROOT_ELEMENT>
<ELEMENT_04 ATTRIBUTE="1">
<DATE>20210110</DATE>
</ELEMENT_04>
<ELEMENT_05 ATTRIBUTE="1">
<NUM>1111111111</NUM>
</ELEMENT_05>
</ROOT_ELEMENT>
XML-файл 2:
document002.xml
<?xml version="1.0" encoding="UTF-8"?>
<docs>
<receivingDateTime>2018-07-18T18:13:51.0</receivingDateTime>
<seller>
<ID SellerAttribute = "Actual">SellerActualCode</ID>
<ID SellerAttribute = "Legal">SellerLegalCode</ID>
</seller>
<receiver>
<ID ReceiverAttribute = "Actual">ReceiverActualCode</ID>
<ID ReceiverAttribute="Legal">ReceiverLegalCode</ID>
</receiver>
<doc002LogisticUnit>
<UnitIdentification>
<sscc>100000000000000001</sscc>
</UnitIdentification>
</doc002LogisticUnit>
<doc002LogisticUnit>
<UnitIdentification>
<sscc>100000000000000002</sscc>
</UnitIdentification>
</doc002LogisticUnit>
<doc002LogisticUnit>
<UnitIdentification>
<sscc>100000000000000003</sscc>
</UnitIdentification>
</doc002LogisticUnit>
<doc002LogisticUnit>
<UnitIdentification>
<sscc>100000000000000004</sscc>
</UnitIdentification>
</doc002LogisticUnit>
<doc002LogisticUnit>
<UnitIdentification>
<sscc>100000000000000005</sscc>
</UnitIdentification>
</doc002LogisticUnit>
</docs>
XML-файл 3:
document003.xml
На примере XML-отчёта версии 1.34 ГС МДЛП (честныйзнак.рф)
<?xml version="1.0" encoding="UTF-8"?>
<documents version="1.34">
<foreign_import action_id="332">
<subject_id>id</subject_id>
<seller_id>id</seller_id>
<shipper_id>id</shipper_id>
<custom_receiver_id>id</custom_receiver_id>
<operation_date>yyyy-mm-ddThh:mm:ss.0</operation_date>
<contract_type>1</contract_type>
<doc_num>number</doc_num>
<doc_date>dd.mm.yyyy</doc_date>
<order_details>
<sscc>100000000000000001</sscc>
</order_details>
</foreign_import>
</documents>
В этом примере создадим преобразователь XML-файлов 1 и 2 в XML-файл 3 с помощью XSLT в IntelliJ IDEA
1.Все файлы помещаются в один каталог, например Input_Output:

2.Открываем каталог Input_Output (проект) в IntelliJ IDEA:

3.Создаём в проекте новый XML-файл с именем, например combined, для объединения всех входящих XML-файлов:

4.Добавляем в combined.xml рыбу объединяющего XML-файла:
<?xml version="1.0" encoding="UTF-8"?>
<docs>
<doc001></doc001>
<doc002></doc002>
</docs>
5.В <doc001></doc001> копируем данные XML-файла 1 (document001.xml) В <doc002></doc002> копируем данные XML-файла 2 (document002.xml)

6.Создаём новый "XSLT Stylesheet" в папке проекта:

7.И сохраняем "XSLT Stylesheet" как convert.xslt
8.Указываем настройки RUN Сonfiguration для проекта: наименование преобразователя (например converter_example), что в проекте является скриптовым файлом (XSLT script file), что входящим в преобразование (XML input file) и куда сохранять результат преобразования (Save to File)
(см. также XLST настройки в IDEA)

9.Открываем входящий XML (combined.xml), XSLT (convert.xslt) и результат преобразования (document003.xml):

10. С помощью команды Split Vertically из контенкстного меню на вкладке файла выводим все три 3 файла в отдельные 3 окна:


11. Разработка XML-преобразования converter_example: данными combined.xml заполнить данные document003.xml:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<documents version="1.34">
<foreign_import action_id="332">
<subject_id>participant_id</subject_id>
<xsl:variable name="seller">
<xsl:value-of select="/docs/doc002/seller/ID[@SellerAttribute='Legal']"/>
</xsl:variable>
<seller_id><xsl:value-of select="$seller"/></seller_id>
<shipper_id><xsl:value-of select="$seller"/></shipper_id>
<custom_receiver_id>
<xsl:value-of select="/docs/doc002/receiver/ID[@ReceiverAttribute='Actual']"/>
</custom_receiver_id>
<operation_date><xsl:value-of select="/docs/doc002//receivingDateTime"/></operation_date>
<contract_type>1</contract_type>
<doc_num><xsl:value-of select="/docs/doc001/ROOT_ELEMENT/ELEMENT_05/NUM"/></doc_num>
<doc_date>
<!-- 20200218 -> 18.02.2020 -->
<xsl:variable name="raw">
<xsl:value-of select="/docs/doc001/ROOT_ELEMENT/ELEMENT_04/DATE"/>
</xsl:variable>
<xsl:value-of select="substring($raw, 7, 2)"/>.<xsl:value-of select="substring($raw, 5, 2)"/>.<xsl:value-of select="substring($raw, 1, 4)"/>
</doc_date>
<order_details>
<xsl:for-each select="/docs/doc002/doc002LogisticUnit/UnitIdentification/sscc">
<sscc><xsl:value-of select="."/></sscc>
</xsl:for-each>
</order_details>
</foreign_import>
</documents>
</xsl:template>
</xsl:stylesheet>
12. Для запуска XSLT: (запускается converter_example, ранее настроенный, см. п. 8)

13. Результат запуска XSLT converter_example в файле document003.xml:

См. также:
Вызов XSLT-преобразователя через VBA
|