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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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