Есть XML вида:
Мы хотим получить данные, которые лежат в узлах ZFPLAT.
Можно написать трансформацию, которая будет парсить XML и аккуратно складывать данные в таблицу, но мы пойдем обходным путем - будем разбирать XML функционалом ABAP.
Ниже пример отчета:
Код
report zread_xml_loc.
data: filename type localfile value 'C:\TEMP\IDoc\ZCUSTCONTR_256942.xml',
lr_xml type ref to cl_xml_document,
lr_node type ref to if_ixml_node,
lr_child_node type ref to if_ixml_node,
lr_iterator type ref to if_ixml_node_iterator,
lr_filter type ref to if_ixml_node_filter,
node_name type string,
node_type type i,
value type string,
rc type sy-subrc.
start-of-selection.
create object lr_xml.
" Читаем XML из файла
rc = lr_xml->import_from_file( filename ).
check rc eq 0.
lr_node = lr_xml->m_document.
check not lr_node is initial.
" Создаем фильтр для прохождения по всем узлам ZFPLAT
lr_filter = lr_node->create_filter_name( name = 'ZFPLAT' ).
" Создаем итератор и задаем для него фильтр для перемещения по узлам
lr_iterator = lr_node->create_iterator( ).
rc = lr_iterator->set_filter( lr_filter ).
check rc eq 0.
" Переходим на первый узел ZFPLAT
lr_node = lr_iterator->get_next( ).
while not lr_node is initial.
" Проходим по всем дочерним узлам
lr_child_node = lr_node->get_first_child( ).
while not lr_child_node is initial.
node_type = lr_child_node->get_type( ).
case node_type.
when lr_child_node->co_node_element.
clear: value,node_name.
value = lr_child_node->get_value( ).
node_name = lr_child_node->get_name( ).
write: node_name, '=', value.
endcase.
lr_child_node = lr_child_node->get_next( ).
endwhile.
lr_node = lr_iterator->get_next( ).
write: /.
endwhile.
lr_xml->free( ).
Результат работы:
Комментариев нет:
Отправить комментарий