Создадим простой XML документ следующего вида:

В транзакции SE11 создаем новый тип данных с необходимыми полями



Создадим табличный тип



Теперь перейдем в транзакцию STRANS

Указываем «простую трансформацию»

В открывшемся окне выбираем кнопку графического редактирования:

Вставляем новый узел:


Перетаскиваем узел во вторую часть экрана:

Должно получиться что-то типа такого:

Возвращаемся обратно, не забыв сохранить изменения:

Мы видим, что автоматически сгенерировались все теги

Активируем:

Теперь переходим в SE38 и пишем такой код.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
" DATA lt_file TYPE sdokcntbins. DATA lv_len TYPE i. DATA(lt_people) = VALUE zzz_t_xml( ( name = 'Иванов И.И.' age = 20 position = 'Менеджер' ) ( name = 'Петров П.П.' age = 25 position = 'Старший Менеджер' ) ( name = 'Сидоров С.С.' age = 25 position = 'Руководитель' ) ). CALL TRANSFORMATION zzz_test_xml_generate SOURCE people = lt_people RESULT XML DATA(lv_xml). CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xml IMPORTING output_length = lv_len TABLES binary_tab = lt_file. CONSTANTS c_file TYPE string VALUE 'C:\Users\Pashigorev-AY\Desktop\example.xml'. cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_len " File length for binary files filename = c_file " Name of file filetype = 'BIN' " File type (ASCII, binary ...) CHANGING data_tab = lt_file " Transfer table EXCEPTIONS OTHERS = 1 ). IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. RETURN. ENDIF. |
Результат запуска:

Обратите внимание на имена узлов, они точно такие же как в нашей структуре.
Если мы хотим чтобы они отличались, можно просто переименовать их в трансформации

