另一种ABAP解析XML file的方式

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 另一种ABAP解析XML file的方式

Created by Jerry Wang on Jun 20, 2014

xml 源文件source code 如下:

<?xml version="1.0"?>
<grid gridtype="16Column2Panel" rows="2 " cols="16 " width="100%">
 <gridcell col="1" row="1" colspan="8">
  <header id="FA163EEF573D1ED3BDD89BC23ABF16C8" textid="FA163EEF573D1ED3BDD89BC23ABF16C8"/>
 </gridcell>
 <gridcell col="1" row="2" colspan="3">
  <label for="//ROLE/VALUE"/>
 </gridcell>
 <gridcell col="4" row="2" colspan="5">
  <picklist id="//ROLE/VALUE" table="//ROLE/VALUE" selection="//ROLE/VALUE" mandatory="" disabled=""/>
 </gridcell>
</grid>
REPORT ztool_xml_parse.
DATA: lv_xstring         TYPE xstring.
DATA: lv_xml TYPE string.
DATA: lv_conv_out        TYPE REF TO cl_abap_conv_out_ce.
DATA: lv_reader          TYPE REF TO if_sxml_reader.
DATA: lv_node            TYPE REF TO if_sxml_node.
DATA: lv_open_node       TYPE REF TO if_sxml_open_element.
DATA: lv_close_node      TYPE REF TO if_sxml_close_element.
DATA: lv_value_node      TYPE REF TO if_sxml_value.
DATA: lv_value           TYPE string.
lv_conv_out = cl_abap_conv_out_ce=>create(  ).
lv_xml = zcl_jerry_tool=>get_file_content_by_path( '\\TSHomeServer\TSHome$\i042416\Desktop\lv_xml.xml' ).
lv_conv_out->write( EXPORTING data = lv_xml ).
lv_xstring = lv_conv_out->get_buffer( ).
lv_reader = cl_sxml_string_reader=>create( lv_xstring ).
lv_node = lv_reader->read_next_node( ).
ASSERT lv_node IS NOT INITIAL.
WHILE lv_reader->node_type <> if_sxml_node=>co_nt_final.
  CASE lv_reader->node_type.
    WHEN if_sxml_node=>co_nt_element_open.
      lv_open_node  ?= lv_node.
      WRITE: / 'OpenNode: ' , lv_open_node->qname-name COLOR COL_NEGATIVE.
      DATA(attrs) = lv_open_node->get_attributes( ).
      LOOP AT attrs ASSIGNING FIELD-SYMBOL(<attr>).
        WRITE: / 'Attribute: ' , <attr>->qname-name COLOR COL_TOTAL, ' Value: ' ,  <attr>->get_value( ) COLOR COL_GROUP.
      ENDLOOP.
    WHEN if_sxml_node=>co_nt_element_close.
      lv_close_node ?= lv_node.
      WRITE: / 'CloseNode: ', lv_close_node->qname-name COLOR COL_NEGATIVE.
    WHEN if_sxml_node=>co_nt_value.
      lv_value_node ?= lv_node.
      lv_value = lv_value_node->get_value( ).
      WRITE: / 'ValueNode: ', lv_value COLOR COL_POSITIVE.
    WHEN if_sxml_node=>co_nt_attribute.
  ENDCASE.
  lv_node = lv_reader->read_next_node( ).
ENDWHILE.

解析结果:

image.png

相关文章
|
2天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
4天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
7天前
|
XML 数据格式 Python
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
|
6天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
8天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
2月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
56 6
|
20天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
24天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
|
20天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
174 37

推荐镜像

更多
下一篇
无影云桌面