*&---------------------------------------------------------------------*

*& Report YTST_201703_XML002

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT YTST_201703_XML002.

TYPE-POOLS: IXML.

DATA: IXML TYPE REF TO IF_IXML,

DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,

STREAMFACTORY TYPE REF TO IF_IXML_STREAM_FACTORY,

ISTREAM TYPE REF TO IF_IXML_ISTREAM,

PARSER TYPE REF TO IF_IXML_PARSER,

NODE TYPE REF TO IF_IXML_NODE,

STRING TYPE STRING,

COUNT TYPE I,

INDEX TYPE I,

TOTALSIZE TYPE I .

TYPES: BEGIN OF XML_LINE,

DATA(256) TYPE X,

END OF XML_LINE.

DATA: XML_TABLE TYPE TABLE OF XML_LINE.

START-OF-SELECTION.

*&s1.上传文件

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'd:flights.xml'

FILETYPE = 'BIN'

IMPORTING

FILELENGTH = TOTALSIZE

TABLES

DATA_TAB = XML_TABLE

EXCEPTIONS

OTHERS = 11.

IF SY-SUBRC<>0.

EXIT.

ENDIF.

*&s2.

*(1)create

*(2)create document

*(3)create STREAM FACTORY

*(4)create ISTREAM ITABLE

*(5)create PARSER

IXML = CL_IXML=>CREATE( ).

DOCUMENT = IXML->CREATE_DOCUMENT( ).

STREAMFACTORY = IXML->CREATE_STREAM_FACTORY( ).

ISTREAM = STREAMFACTORY->CREATE_ISTREAM_ITABLE( TABLE = XML_TABLE

SIZE = TOTALSIZE ).

PARSER = IXML->CREATE_PARSER( STREAM_FACTORY = STREAMFACTORY

ISTREAM = ISTREAM

DOCUMENT = DOCUMENT ).

IF PARSER->PARSE( ) NE 0.

IF PARSER->NUM_ERRORS( ) NE 0.

COUNT = PARSER->NUM_ERRORS( ).

WRITE: COUNT, ' parse errors have occured:'.

DATA: PPARSEERROR TYPE REF TO IF_IXML_PARSE_ERROR,

I TYPE I.

INDEX = 0.

WHILE INDEXGET_ERROR(INDEX= INDEX).

I= PPARSEERROR->GET_LINE().

WRITE: 'line: ', I.

I= PPARSEERROR->GET_COLUMN().

WRITE: 'column: ', I.

STRING= PPARSEERROR->GET_REASON().

WRITE: STRING.

INDEX= INDEX+ 1.

ENDWHILE.

ENDIF.

ENDIF.

CALL METHOD ISTREAM->CLOSE( ).

CLEAR ISTREAM.

NODE = DOCUMENT.

PERFORM PRINT_NODE USING NODE 0.

*&---------------------------------------------------------------------*

*& Form print_node

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->P_NODE text

* -->DEEP text

*----------------------------------------------------------------------*

FORM PRINT_NODE USING P_NODE TYPE REF TO IF_IXML_NODE DEEP TYPE I.

DATA: NODETYPE TYPE I,

ATTRSLEN TYPE I,

ATTRS TYPE REF TO IF_IXML_NAMED_NODE_MAP,

ATTR TYPE REF TO IF_IXML_NODE.

NODETYPE = P_NODE->GET_TYPE( ).

CASE P_NODE->GET_TYPE( ).

WHEN IF_IXML_NODE=>CO_NODE_ELEMENT."这里只处理元素节点

WRITE: /.

PERFORM PRINTNODEINFO USING '元素' DEEP P_NODE.

ATTRS = P_NODE->GET_ATTRIBUTES( ).

ATTRSLEN = ATTRS->GET_LENGTH( ).

DO ATTRSLEN TIMES.

ATTR = ATTRS->GET_ITEM( SY-INDEX - 1 ).

PERFORM PRINTNODEINFO USING '属性' DEEP ATTR.

ENDDO.

"WHEN if_ixml_node=>co_node_text.

"PERFORM printnodeinfo USING '文本' deep p_node.

ENDCASE.

DATA: CHILDS TYPE REF TO IF_IXML_NODE_LIST,

CHILD TYPE REF TO IF_IXML_NODE,

CHILDSLEN TYPE I.

CHILDS = P_NODE->GET_CHILDREN( ).

CHILDSLEN = CHILDS->GET_LENGTH( ).

DATA: DEEP2 TYPE I.

DEEP2 = DEEP + 1.

DO CHILDSLEN TIMES.

CHILD = CHILDS->GET_ITEM( SY-INDEX - 1 ).

PERFORM PRINT_NODE USING CHILD DEEP2.

ENDDO.

ENDFORM. "print_node

*&---------------------------------------------------------------------*

*& Form printnodeinfo

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* -->NODETYPE text

* -->DEEP text

* -->NODE text

*----------------------------------------------------------------------*

FORM PRINTNODEINFO USING NODETYPE TYPE STRING DEEP TYPE I NODE TYPE REF TO IF_IXML_NODE.

DATA: NAME TYPE STRING,

VALUE TYPE STRING,

SPACES TYPE STRING.

DO DEEP TIMES.

SPACES = SPACES && ` `.

ENDDO.

NAME = NODE->GET_NAME( ).

VALUE = NODE->GET_VALUE( ).

WRITE: SPACES, NODETYPE ,NAME,VALUE .

ENDFORM. "printnodeinfo

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐