将itab转换为XML会为BOF添加额外的字符

时间:2016-03-11 14:01:29

标签: xml sap abap

我使用以下代码将内部表中的数据保存为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>

如果我删除多余的空间,它可以正常工作。

2 个答案:

答案 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的默认行为(带有省略的参数)会放置#