UI里面excel数据上传并解析的例子(XML格式)

上次说到在UI里面解析CSV格式的EXCEL例子,这次说说解析XML格式的。

这次用到ABAP里面的正则表达式,具体的用法可以看我上一篇的转帖。

我们还有一个标准程序【DEMO_REGEX_TOY】可以用来试验自己写的正则表达式对不对。


页面上需要一个上传控件。

<%@page language="abap" %>
<%@extension name="thtmlb" prefix="thtmlb" %>
<%@extension name="chtmlb" prefix="chtmlb" %>
<%@extension name="bsp" prefix="bsp" %>
<thtmlb:fileUpload id         = "fileUpload1"
                   onUpload   = "UPLOADFILE"
                   uploadText = "上传"
                   tooltip    = "上传数据" />

METHOD eh_onuploadfile.
***实例化上传数据控件并使用
* -------------------------------------------------------------------
* get the file attributes and content
  DATA lr_file         TYPE REF TO cl_thtmlb_fileupload.
  DATA lv_file_name    LIKE lr_file->file_name.
  DATA lv_file_content LIKE lr_file->file_content.
  DATA lv_file_length  LIKE lr_file->file_length.
  DATA lv_file_type    LIKE lr_file->file_content_type.
  DATA lv_length       TYPE i.

  lr_file ?= htmlb_event_ex.

  lv_file_name    = lr_file->file_name.
  lv_file_content = lr_file->file_content.
  lv_file_length  = lr_file->file_length.
*lv_file_type    = lr_file->file_content_type.
*CHECK lv_file_type = 'application/vnd.ms-excel'.

* get the last 4 bites of the file name
  lv_length = strlen( lv_file_name ).
  CHECK lv_length > 4.
  lv_length = lv_length - 4.

* check the file type
*  IF lv_file_name+lv_length(4) <> '.xml'.
*    CALL METHOD lr_message_container->add_message  "判断格式是不是xml
*      EXPORTING
*        iv_msg_type       = 'E'
*        iv_msg_id         = 'ZXXXX'
*        iv_msg_number     = '001'
*        iv_show_only_once = 'X'.
*
*    lv_exit = 1.
*    EXIT.
*  ENDIF.

***将二进制流转换为string
  DATA lr_converter TYPE REF TO cl_abap_conv_in_ce.
  DATA lv_filestring TYPE string .

  CALL METHOD cl_abap_conv_in_ce=>create
    EXPORTING
      encoding    = 'UTF-8'
      endian      = 'L'
      replacement = '#'
      ignore_cerr = abap_true
      input       = lv_file_content
    RECEIVING
      conv        = lr_converter.

  lr_converter->read( IMPORTING data = lv_filestring ).

  DATA lt_str TYPE TABLE OF string.
  DATA lt_str2 TYPE TABLE OF string.
  DATA lv_str TYPE string.
  DATA moff TYPE i.
  DATA mlen TYPE i.


  SPLIT lv_filestring AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_str.

  LOOP AT lt_str INTO lv_str.

    IF lv_str CP '*<Data*/Data>*'.

      FIND REGEX '<Data.*\/Data>' IN lv_str
           IGNORING CASE
           MATCH OFFSET moff
           MATCH LENGTH mlen.

      lv_str = lv_str+moff(mlen).

      FIND REGEX '>.*<' IN lv_str
           IGNORING CASE
           MATCH OFFSET moff
           MATCH LENGTH mlen.

      lv_str = lv_str+moff(mlen).

      REPLACE '<' IN lv_str WITH ''.
      REPLACE '>' IN lv_str WITH ''.

      APPEND lv_str TO lt_str2.
    ENDIF.

  ENDLOOP.

  BREAK-POINT.

ENDMETHOD.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值