将 itab 转换为 XML 会在文件开头放置一个额外的字符
Conversion of itab into XML puts an extra character at begin of file
我正在使用以下代码将内部 table 中的数据保存为 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 中使用替换参数。但是现在在文件的开头有一个额外的 space 因为浏览器无法读取 xml.How 开头的 space 使浏览器无法读取 xml?我创建了另一个 xml 并添加了 spaces 但浏览器能够读取它。
创建的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>
如果我删除多余的 space,它工作正常。
使用 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参数在调用该模块时应设置为space。当输入字符无法转换为结果代码页时,FM(省略参数)的默认行为为 #
。
这可能是一个替换的BOM(字节顺序标记)。替换过时的功能模块 DOWNLOAD
是个好主意(尽管我建议用 CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
替换它),但是删除替换字符并不总是一个好主意,因为它会在整个过程中删除任何未知字符整个字符串。如果浏览器无法读取 BOM,那么首先是浏览器出了问题。如果您仍然需要删除 BOM,请使用 CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_*
.
在 ABAP 编码中执行此操作
我正在使用以下代码将内部 table 中的数据保存为 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 中使用替换参数。但是现在在文件的开头有一个额外的 space 因为浏览器无法读取 xml.How 开头的 space 使浏览器无法读取 xml?我创建了另一个 xml 并添加了 spaces 但浏览器能够读取它。 创建的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>
如果我删除多余的 space,它工作正常。
使用 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参数在调用该模块时应设置为space。当输入字符无法转换为结果代码页时,FM(省略参数)的默认行为为 #
。
这可能是一个替换的BOM(字节顺序标记)。替换过时的功能模块 DOWNLOAD
是个好主意(尽管我建议用 CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
替换它),但是删除替换字符并不总是一个好主意,因为它会在整个过程中删除任何未知字符整个字符串。如果浏览器无法读取 BOM,那么首先是浏览器出了问题。如果您仍然需要删除 BOM,请使用 CL_ABAP_CHAR_UTILITIES=>BYTE_ORDER_MARK_*
.