Как это часто бывает, есть много разных способов решить одну и ту же задачу. И на этот счет тоже есть варианты:
- Разбирать текст руками или регулярными выражениями: плохой подход сходу, не обсуждается
- CL_XML_DOCUMENT: классический подход, но несколько муторный на мой вкус
- CALL TRANSFORMATION: стандартный подход, но меня всегда смущает небходимость наличия отдельного артефакта. Кроме того, если работать с этим раз в год, то синтаксис трансформаций выпадает из памяти и необходимо снова обращаться к примерам и/или документации
Новый для меня способ — использовать функциональный модуль SMUM_XML_PARSE, у которого очень простой синтаксис:
1 2 3 4 5 6 |
CALL FUNCTION 'SMUM_XML_PARSE' EXPORTING xml_input = lv_xml TABLES xml_table = lt_xml_table return = lt_return. |
И если подать на вход XML такой пример:
то результат будет следующим:
На выходе мы получаем таблицу очевидной структуры, которую легко разобрать привычными способами.
Результат получается быстро и просто, но есть свои ограничения. Например, нет поддержки длинных строк.