将 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 编码中执行此操作