前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >删除指定xml节点下所有子节点的ABAP代码

删除指定xml节点下所有子节点的ABAP代码

作者头像
Jerry Wang
发布2021-02-10 20:03:34
1.6K0
发布2021-02-10 20:03:34
举报
代码语言:javascript
复制
METHOD DELETE_XML_NODE.
***********************************************************************
*  This method deletes all tags which belong to a given XML node
***********************************************************************

  DATA: lo_converter                 TYPE REF TO cl_http_request.

  DATA: lv_xml_string        TYPE string.
  DATA: lv_node_start_search_string TYPE string.
  DATA: lv_node_end_search_string TYPE string.
  DATA: lv_node_found TYPE apc_v_indicator.
  DATA: lv_node_start    TYPE i.
  DATA: lv_node_end_start TYPE i.
  DATA: lv_node_end_length TYPE i.
  DATA: lv_node_end      TYPE i.
  DATA: lv_node_length   TYPE i.

  DATA: lv_bin_sign(1) TYPE X.
  DATA: lv_bin_initial TYPE xstring.

*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* delete 'line feed, new line' from cv_xml_xstring, as it can not be
* converted to string
  lv_bin_sign = '0A'.
  REPLACE ALL OCCURRENCES OF lv_bin_sign IN cv_xml_xstring WITH lv_bin_initial IN BYTE MODE.

  TRY.
    CREATE OBJECT lo_converter
      EXPORTING
        add_c_msg = 1.

*   convert given xml xstring to string
    CALL METHOD lo_converter->if_http_entity~set_data
      EXPORTING
        data = cv_xml_xstring.
    CALL METHOD lo_converter->if_http_entity~get_cdata
      RECEIVING
        data = lv_xml_string.

*   for the node's start, we have to search for the opening tag of the given node name
    CONCATENATE '<' iv_xml_node_name
    INTO lv_node_start_search_string.

*   for the node's end, we have to search for the closing tag of the given node name
    CONCATENATE '</' iv_xml_node_name '>'
    INTO lv_node_end_search_string.

*   assume that there's at least one occurence of the node
    lv_node_found = abap_true.

*   loop as the node can occur several times
    WHILE lv_node_found EQ abap_true.
      FIND lv_node_start_search_string
      IN lv_xml_string
      MATCH OFFSET lv_node_start.
      IF sy-subrc = 0. " node's opening tag found!
        FIND lv_node_end_search_string
        IN lv_xml_string
        MATCH OFFSET lv_node_end_start
        MATCH LENGTH lv_node_end_length.
        lv_node_end = lv_node_end_start + lv_node_end_length.
*       for REPLACE SECTION statement the length of the whole nodes string is needed
        lv_node_length = lv_node_end - lv_node_start.
*       delete currently found occurrence of given node from xml
        REPLACE SECTION OFFSET lv_node_start LENGTH lv_node_length OF lv_xml_string WITH ''.
      ELSE. " NO node's opening tag found! -> all occurrences of node already deleted
        lv_node_found = abap_false.
        EXIT.
      ENDIF.
    ENDWHILE.

*   convert changed xml string back to xstring
    CALL METHOD lo_converter->if_http_entity~set_cdata
      EXPORTING
        data = lv_xml_string.
    CALL METHOD lo_converter->if_http_entity~get_data
      RECEIVING
        data = cv_xml_xstring.

  ENDTRY.
ENDMETHOD.

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com