背景
最近在弄Fiori 的新闻磁贴,然后了解了一下新闻磁贴的原理(RSS),其中RSS常用是XML的格式,所以需要使用ABAP对RSS订阅进行解析后然后odata(或者restful)输出
解析后的内表
demo code ABAP
REPORT Y_PERSON_XML.
DATA lv_url TYPE string VALUE 'https://blog.csdn.net/huanglin6/rss/list?spm=1001.2014.3001.5494'.
DATA lo_http TYPE REF TO if_http_client.
DATA:LV_RESULT_STRING TYPE STRING,
E_DATA TYPE STRING.
DATA TEXT TYPE STRING.
DATA LV_XSTRING TYPE XSTRING.
DATA XML_TABLE TYPE STANDARD TABLE OF SMUM_XMLTB.
DATA RETURN TYPE STANDARD TABLE OF BAPIRET2.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = lv_url
IMPORTING
client = lo_http
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc = 0.
CALL METHOD lo_http->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL METHOD lo_http->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4.
IF sy-subrc = 0.
LV_RESULT_STRING = LO_HTTP->RESPONSE->GET_CDATA( ).
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
TEXT = LV_RESULT_STRING
IMPORTING
BUFFER = LV_XSTRING
EXCEPTIONS
FAILED = 1
.
CALL FUNCTION 'SMUM_XML_PARSE'
EXPORTING
xml_input = LV_XSTRING
TABLES
xml_table = XML_TABLE
return = return
.
IF SY-SUBRC EQ 0.
ENDIF.
ENDIF.
ENDIF.
其中
- HIER是层次结构(即xml文件的第N层),
- TYPE是当前结点的类型:A:属性,V是结点值,空:其他