2016-03-11 2 views
1

Я использую следующий код для сохранения данных во внутренней таблице в виде XML-файла. Но дополнительный символ '#' добавляется к файлу. Если я удалю этот дополнительный «#», браузер сможет прочитать xml.Преобразование itab в XML добавляет дополнительный символ в BOF

REPORT ZGAURAV1. 
types: begin of struct, 
    col1 type i, 
    col2(5), 
    end of struct. 

    data: it type STANDARD TABLE OF struct. 
    data: wa type struct. 
    wa-COL1 = 1. 
    wa-COL2 = 'abc'. 
    APPEND wa to it. 
    wa-COL1 = 2. 
    wa-COL2 = 'def'. 
    APPEND wa to it. 

    data: xml_out TYPE string. 

call TRANSFORMATION id 
source output = it[] 
RESULT XML xml_out. 

data: xmltab type STANDARD TABLE OF string. 
append xml_out to xmltab 
. 
CALL FUNCTION 'DOWNLOAD' 
EXPORTING 
    filename = 'C:\USERS\GAURAV\DESKTOP\TESTING.XML' 
    filetype = 'ASC' 
TABLES 
    data_tab = xmltab 

XML-файл, который будет создаваться в

#<?xml version="1.0" encoding="utf-16"?><asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"><asx:values><OUTPUT><item><COL1>1</COL1><COL2>abc</COL2></item><item><COL1>2</COL1><COL2>def</COL2></item></OUTPUT></asx:values></asx:abap> 

EDIT:

Я попытался с помощью параметра замены в GUI_DOWNLOAD как предложено @Suncatcher. Но теперь в начале файла есть дополнительное пространство, из-за которого браузер не может прочитать xml. Как пространство в начале делает браузер неспособным прочитать xml? Я создал еще один xml и добавил пробелы, но браузер смог прочитать его. Созданный XML является

<?xml version="1.0" encoding="utf-16"?><asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"><asx:values><OUTPUT><item><COL1>1</COL1><COL2>abc</COL2></item><item><COL1>2</COL1><COL2>def</COL2></item></OUTPUT></asx:values></asx:abap> 

Если я удалить дополнительное пространство, он отлично работает.

+0

Что я могу предложить - это изменить браузер, как говорили предыдущие ораторы :) Экстра-пространство не должно быть проблемой вообще. – Suncatcher

ответ

1

Возможно, это замененная спецификация (знак байтового байта). Замена устаревшего функционального модуля DOWNLOAD является хорошей идеей (хотя я бы рекомендовал заменить ее CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD), но удаление символа замены не всегда является хорошей идеей, так как она удаляет ЛЮБОЙ неизвестный символ по всей строке. Если браузер не может прочитать спецификацию, то это браузер, который разбит в первую очередь. Если вам все еще нужно удалить спецификацию, сделайте это в кодировке ABAP, используя CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_*.

+0

Я отредактировал вопрос. Пожалуйста, посмотрите. – user3311810

+0

@ user3311810 Да, но вы не внедрили предлагаемое решение (удаление спецификации на стороне ABAP). – vwegert

+0

Можете ли вы упомянуть синтаксис, чтобы удалить спецификацию в abap. – user3311810

0

Использовать GUI_DOWNLOAD вместо устаревших DOWNLOAD.

CALL FUNCTION 'GUI_DOWNLOAD' 
EXPORTING 
    filename = 'C:\USERS\GAURAV\DESKTOP\TESTING.XML' 
    replacement = ''         "pay attention to this parameter 
TABLES 
    data_tab  = xmltab. 

Параметр ЗАМЕНА должен быть установлен в космос во время вызова этого модуля. Поведение по умолчанию FM (с пропущенным параметром) помещает #, когда входной символ не может быть преобразован в коду.

+0

Я редактировал вопрос. Пожалуйста, посмотрите. – user3311810