我使用以下代码将内部表中的数据保存为xml文件。 但是额外的'#'字符会附加到文件中。 如果我删除这个额外的'#',浏览器就能读取xml。
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>
修改
我尝试使用@Suncatcher建议的GUI_DOWNLOAD中的替换参数。但是现在文件开头有一个额外的空间,因为浏览器无法读取xml.How开头的空间是否使浏览器无法读取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 :(得分:1)
这可能是替换的BOM(字节顺序标记)。替换过时的功能模块DOWNLOAD
是一个好主意(虽然我建议用CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
替换它),但删除替换字符并不总是一个好主意,因为它会删除任何未知字符在整个字符串中。如果浏览器无法读取BOM,那么它首先是破坏的浏览器。如果您仍需要删除BOM,请使用CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_*
在ABAP编码中执行此操作。
答案 1 :(得分: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.
在调用此模块期间,应将参数REPLACEMENT设置为空格。当输入字符无法转换为结果代码页时,FM的默认行为(带有省略的参数)会放置#
。