sap解析xml存到内表 abap解析xml

sap解析xml存到内表,sap自身提供了解析xml报文的函数,我这次要解析的xml报文,比较特别,和正常标准的报文有些不同。

<Response>

<Execution>

<Status code=”0″ sqlcode=”0″ description=”TEST”/>

</Execution>

<ResponseContent>

<Parameter/>

<Document/>

</ResponseContent>

</Response>

用下列SAP函数将上述的xml报文解析到内表!

“解析返回报文
DATA(out) = cl_demo_output=>new(
)->begin_section( `XML-Data` ).
DATA(xml) = cl_abap_codepage=>convert_to(” && return_str && ”).
“out->write_xml( xml ).

“out->next_section( `Parsed Nodes of the XML-Data` ).
DATA: BEGIN OF node_wa,
node_type TYPE string,
prefix TYPE string,
name TYPE string,
nsuri TYPE string,
value TYPE string,
value_raw TYPE xstring,
END OF node_wa,
nodes LIKE TABLE OF node_wa,
S_nodes LIKE node_wa.

DATA(reader) = cl_sxml_string_reader=>create( xml ).
TRY.
DO.
CLEAR node_wa.
DATA(node) = reader->read_next_node( ).
IF node IS INITIAL.
EXIT.
ENDIF.

CASE node->type.
WHEN if_sxml_node=>co_nt_element_open.
DATA(open_element) = CAST if_sxml_open_element( node ).
node_wa-node_type = `open element`.
node_wa-prefix = open_element->prefix.
node_wa-name = open_element->qname-name.
node_wa-nsuri = open_element->qname-namespace.
DATA(attributes) = open_element->get_attributes( ).
APPEND node_wa TO nodes.
LOOP AT attributes INTO DATA(attribute).
node_wa-node_type = `attribute`.
node_wa-prefix = attribute->prefix.
node_wa-name = attribute->qname-name.
node_wa-nsuri = attribute->qname-namespace.
IF attribute->value_type = if_sxml_value=>co_vt_text.
node_wa-value = attribute->get_value( ).
ELSEIF attribute->value_type =
if_sxml_value=>co_vt_raw.
node_wa-value_raw = attribute->get_value_raw( ).
ENDIF.
APPEND node_wa TO nodes.
ENDLOOP.
CONTINUE.
WHEN if_sxml_node=>co_nt_element_close.
DATA(close_element) = CAST if_sxml_close_element( node ).
node_wa-node_type = `close element`.
node_wa-prefix = close_element->prefix.
node_wa-name = close_element->qname-name.
node_wa-nsuri = close_element->qname-namespace.
APPEND node_wa TO nodes.
CONTINUE.
WHEN if_sxml_node=>co_nt_value.
DATA(value_node) = CAST if_sxml_value_node( node ).
node_wa-node_type = `value`.
IF value_node->value_type = if_sxml_value=>co_vt_text.
node_wa-value = value_node->get_value( ).
ELSEIF value_node->value_type = if_sxml_value=>co_vt_raw.
node_wa-value_raw = value_node->get_value_raw( ).
ENDIF.
APPEND node_wa TO nodes.
CONTINUE.
WHEN OTHERS.
node_wa-node_type = `Error`.
APPEND node_wa TO nodes.
EXIT.
ENDCASE.

ENDDO.
CATCH cx_sxml_parse_error INTO DATA(parse_error).
“out->write_text( parse_error->get_text( ) ).
ENDTRY.

变量“return_str”是返回的xml字符。

内表“nodes”是解析后存放的数据。

源代码到CSDN上下载:https://download.csdn.net/download/yanyulong0/10747274

 

未经允许不得转载:软件接口开发,api接口开发,webservice接口开发,设备接口,xml数据解析,json数据解析 » sap解析xml存到内表 abap解析xml

赞 (0)

评论 1

  1. 匿名6回复