如何正确地将XML内容反序列化为ABAP数据字段?

时间:2017-12-02 07:38:47

标签: xml xslt abap

当通过XSLT读取ABAP内部表字段中的XML内容时,有时无法读取该值或出现异常:反序列化期间出错。如果我现在是XML数据类型,如何为ABAP itab字段选择正确的数据类型? e.g。

XML数据类型....... | ......格式.... | ............. ABAP数据类型........ ..

string 250 .......................... | ..........文字....... ..... | .....................?

string 250 ......................... | ..日期yyy-mm-dd .. | ........ .............?

string 250 ......................... | .Date PARAM-4 .... | ......... .............?

string 250 ......................... | ..时间hh:mm ........ | .... ................?

string 250 ........................ | ..Number z9(4)........ | .... ...............?

string 250 ........................ | .. Number 9(4)......... | ... ..............?

string 250 ........................ | ..Number 9(7).......... | .. ...............?

string 250 ........................ | ..Number 9(6)............ ...............?

string 250 ........................ | ..Number z9(2)......... | ... ...............?

string 250 ........................ | ..Number 9(5)............ ................?

string 250 ........................ | ..Number d9(2)......... | ... ..............?

string 250 ........................ | ..Number 9(19)......... | ... ..............?

string 250 ........................ | ..Number 9(17)v9(2)| ........ .........?

string 250 ........................ | .Number Delco价格| ............... ..?

string 250 ........................ | Number Delco金额| ................ 。?

string 250 ........................ |号码客户发票金额| ............... ..?

string 250 ........................ | ..Number PARAM-3 ....... | ...... ...........?

请注意

  • xml = version =“1.0”encoding =“UTF-8”standalone =“true”

  • PARM-3 =字段格式中使用的小数分隔符“,”或“。”

  • PARM-4 =字段格式“dd-mm-yyyy”或“yyyy-mm-dd”中使用的日期格式

数字格式:

  • 9(X):一个X位整数,用前导零格式化,没有符号,例如9(2)“01”

  • v:隐式小数位,例如9(2)v9(2)格式1.1为“0110”

  • d:PARM-3指定的十进制标记,或者。例如9(2)d9(2)格式1.1为“01,10”或“01.10”

  • z:压制前导零,如果为负则包括符号 例如z9(6)d9(2)“-1.10”

    %:包括百分比字符,例如z9(2)d9(2)%“20.00%”

  • Delco价格:z9(X)d9(Y)其中Y是BillingDocument / DeliverCompany / CurrencyPricingMinorUnits,X是 字段中剩余数字的数量

  • Delco数量:z9(X)d9(Y)其中Y是 BillingDocument / DeliverCompany / CurrencyMinorUnits和X是数字 字段中的剩余数字

  • 客户发票金额:z9(X)d9(Y)其中Y为 BillingDocument / InvoiceCustomer / MinorUnits和X是数字 字段中的剩余数字

1 个答案:

答案 0 :(得分:0)

如何反序列化XML?根据我的理解,你不会在XML文件中有复杂的类型,或者你呢?

您可以尝试实际(复杂类型和常规类型):

DATA: xml_utils TYPE REF TO if_ixml.xml_utils = cl_ixml=>create( ).
      xml_stream_factory TYPE REF TO if_ixml_stream_factory.xml_stream_factory = xml_utils->create_stream_factory( ).
DATA: xml_input_stream TYPE REF TO if_ixml_istream.xml_input_stream = xml_stream_factory->create_istream_uri( system_id = 'file://test.xml' ).
DAtA: example_data type z_s_your_structure.

" Deserialize XML 
CALL TRANSFORMATION id 
   SOURCE XML       = xml_input_stream 
   RESULT data_node = example_data.

有关详情,请查看以下链接12