Текущее время: Пн, июл 14 2025, 04:43

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Не могу определится с длиной записи при считывании XML файла с сервера
СообщениеДобавлено: Пн, ноя 17 2014, 11:47 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
Не могу определится с длиной записи при считывании XML файла с сервера.Проблемма такая: Нужно считать XML файлы с сервера и и паризвести парсинг. С помощью open dataset,read dataset я записываю данные в табл..
и call method o_xml->CREATE_WITH_TABLE EXPORTING table = it_xml[] получаю парсинг. Дело в том,что сначала я считывала запись в строку 128 символов. Потом для некоторых файлов пришлось сделать 1024,а потом и вовсе 2048. Это как правило 1 запись в табл. Подозреваю что что-то не так. Если я эти же файлы выгружу вручную в каталог на компьютере,то то с помощью
call method o_xml->import_from_file
exporting
filename = v_file
receiving
retcode = v_status.
все файлы парсится без пророблемм.
Может кто подскажет что не так?
Поиск по теме ничего не дал


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу определится с длиной записи при считывании XML файла с сервера
СообщениеДобавлено: Пн, ноя 17 2014, 12:58 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
Похоже,у меня получилось через open dataset file_server for input in BINARY MODE. Протестирую еще раз


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Не могу определится с длиной записи при считывании XML файла с сервера
СообщениеДобавлено: Вт, дек 16 2014, 22:15 
Начинающий
Начинающий

Зарегистрирован:
Ср, фев 12 2014, 12:25
Сообщения: 17
добрый день самому приходится работать с xml файлами, имеющими определенную структуру. Для удобства была создана структура и с её помощью создана трансформация. Далее xml файл считываю через gui_upload файл, и через call transformation произвожу парсирование в структуру. работает без проблем, в том числе сложные древовидные структуры. Про кодировку bin верно замечено, но при использовании call tranformation можно отловить ошибку и подкорректировать файл. Если надо будет подробнее могу выложить код а также ссылки как это создать, правда на немецком.

_________________
Ох, непростая эта работа из юриста делать программиста...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не могу определится с длиной записи при считывании XML файла с сервера
СообщениеДобавлено: Вт, янв 13 2015, 15:54 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
Добрый день..в свое время написал xml парсер..может поможет.
FUNCTION Z_PARSER_X600.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*" IMPORTING
*" REFERENCE(XML_DATA) TYPE STRING
*" EXPORTING
*" REFERENCE(RESPONCE) TYPE ZSTR_COLVIR_RESP
*"----------------------------------------------------------------------
TABLES: ZX600, ZTBPNS.
DATA:
xml_xstr TYPE xstring,
istream TYPE REF TO if_ixml_istream.
* DATA:
* wa TYPE STRING.
DATA:
g_ixml TYPE REF TO if_ixml.
DATA:
streamFactory TYPE REF TO if_ixml_stream_factory.
DATA:
parser TYPE REF TO if_ixml_parser.
DATA:
document TYPE REF TO if_ixml_document.
DATA
tb_x600 TYPE TABLE OF ZX600.
DATA:
lk_x600 LIKE ZX600,
refer0 type zx600-refer.
DATA:
lk_ztbpns LIKE ZTBPNS.
DATA:
nq type i.

CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = xml_data
IMPORTING
buffer = xml_xstr.
IF xml_xstr is not initial.
g_ixml = cl_ixml=>create( ).
streamFactory = g_ixml->create_stream_factory( ).

istream = streamFactory->create_istream_xstring( STRING = xml_xstr ).
document = g_ixml->create_document( ).
parser = g_ixml->create_parser( stream_factory = streamFactory
istream = iStream
document = document ).

IF parser->parse( ) NE 0.
IF parser->num_errors( ) NE 0.
DATA: parseError TYPE REF TO if_ixml_parse_error,
str TYPE string,
i TYPE i,
count TYPE i,
index TYPE i.
count = parser->num_errors( ).
* WRITE: count, ' parse errors have occured:'.
index = 0.
WHILE index < count.
parseError = parser->get_error( index = index ).
i = parseError->get_line( ).
* WRITE: 'line: ', i.
i = parseError->get_column( ).
* WRITE: 'column: ', i.
str = parseError->get_reason( ).
* если ошибка в самом документе
responce-zmess = str.
responce-zstat = '1'.
* LEAVE PROGRAM.
INDEX = INDEX + 1.
ENDWHILE.
ENDIF.

ENDIF.

DATA: t_str TYPE string.
DATA: element TYPE REF TO if_ixml_element.
DATA: child TYPE REF TO if_ixml_node.
DATA: children TYPE REF TO if_ixml_node_list,
child_iterator TYPE REF TO if_ixml_node_iterator.
DATA: attributes TYPE REF TO if_ixml_named_node_map,
attribute TYPE REF TO if_ixml_attribute.
* парсим XML
element = document->get_root_element( ).

child = element->get_parent( ).

child_iterator = element->create_iterator( ).
nq = 0.
WHILE NOT child IS INITIAL.
t_str = child->get_name( ).
WRITE / t_str.
DATA: lr_nodeiterator TYPE REF TO if_ixml_node_iterator,
lr_attributenode TYPE REF TO if_ixml_node.
DATA: lc_name TYPE string,
lc_value TYPE string.
DATA:
flag(1).
attributes = child->get_attributes( ).
IF NOT attributes IS INITIAL.
lr_nodeiterator = attributes->create_iterator( ).
lr_attributenode = lr_nodeiterator->get_next( ).

WHILE lr_attributenode IS NOT INITIAL.
lc_name = lr_attributenode->get_name( ).
lc_value = lr_attributenode->get_value( ).
lr_attributenode = lr_nodeiterator->get_next( ).
* WRITE: / lc_name, '=', lc_value.

CASE lc_name.
..... забираем данные по тегам
ENDCASE.
ENDWHILE.
ENDIF.
child = child_iterator->get_next( ).
ENDWHILE.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB