📜 ⬆️ ⬇️

XSLT conversion of an internal table to ABAP with a generic reference type field

Prologue


What is the note about? As from the internal table, the row of which contains a link to an unknown (generic) type (REF TO DATA), which, in fact, stores a link to the same table, get the XML of the specified format. At the same time, the number of nesting levels is initially unknown.
Why do you need it? I needed this when uploading data to various formats of MS Office XML files without using OLE.
Who is this article for? For programmers on ABAP.
Required level of knowledge: know what the reference type is , generic type , XML ; to hear that there is such a thing as XSLT .

How to deal with this?


Task

There is a tree. The tree is stored in the internal table. The table type is defined as follows:
TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data "    , END OF tdeep_struct , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . 


Those. The structure of the table row in the rf_child_list field contains a reference to a generic type.

From the internal table of this structure, you need to get the following XML format:
 <List> <MyItem> <Name>  </Name> </MyItem> <MyItem> <Name>  </Name> </MyItem> </List> 

')
At the same time, the location of the source tree nodes in the final XML should correspond to the downward traversal of the tree (Ie, we start looking at the internal table entries from above. We display the contents of the first record, if it has dependent entries in the rf_child_list , then we start outputting them from the first record. it is dependent - then we derive them, etc.).

Test case

Suppose we have a tree of the following form stored in the internal table (the values ​​of the Name field are listed):
 GrandParent1 Child1 Child2 GrandChild1 GrandParent2 

Under the terms of the problem, we need to get this XML from this data.
Summary XML for Test Case
 <List> <MyItem> <Name> GrandParent1</Name> </MyItem> <MyItem> <Name>Child1 </Name> </MyItem> <MyItem> <Name>Child2 </Name> </MyItem> <MyItem> <Name>GrandChild1 </Name> </MyItem> <MyItem> <Name> GrandParent2</Name> </MyItem> </List> 


Decision

Let's start with a simple one: ABAP code, what could be simpler?

Define and fill the internal table with test data
 DATA : gt_tree TYPE t_deep_struct "  , gtree TYPE tdeep_struct "     , gchild TYPE tdeep_struct "     , ggrandchild TYPE tdeep_struct "     . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct "     , <gt_grandchild_list> TYPE t_deep_struct "     . START-OF-SELECTION. gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. 



Solving the problem, I thought that I should use XSLT transformation. Since the tag for this article I put "XSLT for beginners," then I must mention what it is. If it is completely on the fingers, then it is a language that allows you to get another XML from one XML. In doing so, XSLT itself is a subset of XML. Stop! And where does the internal table, if it converts XML? And this is such a feature of the implementation of XSLT in SAP. Let's see more.

For performing the transformation in ABAP is responsible operator CALL TRANSFORMATION . He has a lot of options and a lot of options for work.
The input data that needs to be converted will be transmitted by specifying the SOURCE _ = __ .
The result can be obtained by specifying the RESULT XML XML/ // . For simplicity, we will get the result in a string.

The result of the transformation is displayed on the screen by the standard means of the object CL_XML_DOCUMENT.
We get the following code:
  CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ). 


Oh yeah ... I'm distracted! The question was: and where is the transformation, if at all, is it to convert one XML into another?

Bit rtfm

Let's start with the fact that in SAP transformations are used to serialize and deserialize data. Ie, how from some data object (structure, internal table, object) to get a representation in the form of a sequence of bits and vice versa. We just have a serialization task: the input is a nested structure (internal table ABAP), and the output is XML (textual representation).
XSLT in SAP are of 2 types: normal XSLT and simple transformation (ST). SAP seemed to have little XSLT and it implemented its own XSLT subset, which called the simple transformation. It does not suit us, because cannot work with generic type fields in input parameters.
Remains pure XSLT.
SAP, when executed with XSLT serialization, transforms input transformation parameters to asXML ( canonical XML representation ). In the process of this conversion, according to certain rules , ABAP types are converted, this also applies to the generic type (You can explicitly get a canonical representation of any variable using the standard ABAP XSLT conversion with the reserved name ID ).
ABAP help picture explaining data transformations during transformations
We are interested in the direction of Serialization

For my example, the canonical XML representation looks like this:
 <?xml version="1.0" encoding="utf-8" ?> <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> <asx:values> <TABLE> <item> <NAME>GrandParent1</NAME> <RF_CHILD_LIST href="#d1" /> </item> <item> <NAME>GrandParent2</NAME> <RF_CHILD_LIST /> </item> </TABLE> </asx:values> <asx:heap xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:abap="http://www.sap.com/abapxml/types/built-in" xmlns:cls="http://www.sap.com/abapxml/classes/global" xmlns:dic="http://www.sap.com/abapxml/types/dictionary"> <prg:T_DEEP_STRUCT id="d1" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM"> <item> <NAME>Child1</NAME> <RF_CHILD_LIST /> </item> <item> <NAME>Child2</NAME> <RF_CHILD_LIST href="#d2" /> </item> </prg:T_DEEP_STRUCT> <prg:T_DEEP_STRUCT id="d2" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM"> <item> <NAME>GrandChild1</NAME> <RF_CHILD_LIST /> </item> </prg:T_DEEP_STRUCT> </asx:heap> </asx:abap> 



And how to live with it?

When obtaining a canonical representation of XML for the inner table, the table itself is converted into an element , . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
 ,         .           . ..      RF_CHILD_LIST ,      DATA ( TYPE REF TO DATA ),      ,     href     ,    . 
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT

, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT

, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT

, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT

, . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
, <RF_CHILD_LIST href="#d1" /> , # - XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
.., XML , .

XSLT- ?
XSLT-.
SAP STRANS.

, «»(F5).

– , ( – XSLT). Enter.

XSLT, . , , – .

, .., , ( , , , html ).

, , .. .
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

:
xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

, XML- List. :
<xsl:template match="/"> <List> </List> </xsl:template>

item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
<xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

<xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
, , .
, asx, sap, prg (XSLT ). XML, xsl:transform :
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

.. , exclude-result-prefixes , XML.
, RF_CHILD_LIST . . – .
, id . ChilListID . .
:
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

.. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
prg:T_DEEP_STRUCT id ChilListID :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
XPath , prg:T_DEEP_STRUCT , id ChilListID .
item: <xsl:for-each select="item">

, , , , XSLT . :
<xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

MyItem Name . :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

. : .
xsl:apply-templates , select XML .
, , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
<xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

, :
<xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

, , , .

, : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



, XSLT ?


ABAP MSDN: XSLT XPath tutorial XSLT
  1. , . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
    , <RF_CHILD_LIST href="#d1" /> , # -
    XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
    .., XML , .

    XSLT- ?
    XSLT-.
    SAP STRANS.

    , «»(F5).

    – , ( – XSLT). Enter.

    XSLT, . , , – .

    , .., , ( , , , html ).

    , , .. .
    <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

    :
    xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

    XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

    , XML- List. :
    <xsl:template match="/"> <List> </List> </xsl:template>

    item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
    <xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

    <xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
    , , .
    , asx, sap, prg (XSLT ). XML, xsl:transform :
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

    .. , exclude-result-prefixes , XML.
    , RF_CHILD_LIST . . – .
    , id . ChilListID . .
    :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

    .. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

    ? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
    prg:T_DEEP_STRUCT id ChilListID :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
    XPath , prg:T_DEEP_STRUCT , id ChilListID .
    item: <xsl:for-each select="item">

    , , , , XSLT . :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

    MyItem Name . :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

    . : .
    xsl:apply-templates , select XML .
    , , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
    <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

    , :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

    , , , .

    , : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


    ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



    , XSLT ?


    ABAP MSDN: XSLT XPath tutorial XSLT
  2. , . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
    , <RF_CHILD_LIST href="#d1" /> , # -
    XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
    .., XML , .

    XSLT- ?
    XSLT-.
    SAP STRANS.

    , «»(F5).

    – , ( – XSLT). Enter.

    XSLT, . , , – .

    , .., , ( , , , html ).

    , , .. .
    <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

    :
    xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

    XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

    , XML- List. :
    <xsl:template match="/"> <List> </List> </xsl:template>

    item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
    <xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

    <xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
    , , .
    , asx, sap, prg (XSLT ). XML, xsl:transform :
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

    .. , exclude-result-prefixes , XML.
    , RF_CHILD_LIST . . – .
    , id . ChilListID . .
    :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

    .. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

    ? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
    prg:T_DEEP_STRUCT id ChilListID :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
    XPath , prg:T_DEEP_STRUCT , id ChilListID .
    item: <xsl:for-each select="item">

    , , , , XSLT . :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

    MyItem Name . :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

    . : .
    xsl:apply-templates , select XML .
    , , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
    <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

    , :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

    , , , .

    , : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


    ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



    , XSLT ?


    ABAP MSDN: XSLT XPath tutorial XSLT
  3. , . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
    , <RF_CHILD_LIST href="#d1" /> , # -
    XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
    .., XML , .

    XSLT- ?
    XSLT-.
    SAP STRANS.

    , «»(F5).

    – , ( – XSLT). Enter.

    XSLT, . , , – .

    , .., , ( , , , html ).

    , , .. .
    <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

    :
    xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

    XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

    , XML- List. :
    <xsl:template match="/"> <List> </List> </xsl:template>

    item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
    <xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

    <xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
    , , .
    , asx, sap, prg (XSLT ). XML, xsl:transform :
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

    .. , exclude-result-prefixes , XML.
    , RF_CHILD_LIST . . – .
    , id . ChilListID . .
    :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

    .. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

    ? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
    prg:T_DEEP_STRUCT id ChilListID :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
    XPath , prg:T_DEEP_STRUCT , id ChilListID .
    item: <xsl:for-each select="item">

    , , , , XSLT . :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

    MyItem Name . :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

    . : .
    xsl:apply-templates , select XML .
    , , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
    <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

    , :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

    , , , .

    , : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


    ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



    , XSLT ?


    ABAP MSDN: XSLT XPath tutorial XSLT
  4. , . . .. RF_CHILD_LIST , DATA ( TYPE REF TO DATA ), , href , .
    , <RF_CHILD_LIST href="#d1" /> , # -
    XLink , d1 – . XML-: asx:heap , id d1. < prg:T_DEEP_STRUCT id="d1" … > . , .
    .., XML , .

    XSLT- ?
    XSLT-.
    SAP STRANS.

    , «»(F5).

    – , ( – XSLT). Enter.

    XSLT, . , , – .

    , .., , ( , , , html ).

    , , .. .
    <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"> <xsl:strip-space elements="*"/> <xsl:template match="/"> </xsl:template> </xsl:transform>

    :
    xmlns:xsl , xsl. .. , xsl : ( <xsl:strip-space elements="*"/> ) xmlns:sap , sap xsl:transform , XSLT- <xsl:strip-space elements="*"/> <xsl:template match="/"> , XML

    XSLT- ( xsl:template ) XML-, match . match XPath . , «/», XML- TABLE "/asx:abap/asx:values/TABLE" (.. XML- ( asx:abap ) ( TABLE )).

    , XML- List. :
    <xsl:template match="/"> <List> </List> </xsl:template>

    item TABLE XML , <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> , select XPath , . MyItem , Name NAME , . , :
    <xsl:template match="/"> <List> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </List> </xsl:template>

    <xsl:value-of select="NAME"/> , select XPath- , . , xsl:value-of , xsl:for-each . , xsl:for-each , , xsl:value-of – (.. xsl:for-each ).
    , , .
    , asx, sap, prg (XSLT ). XML, xsl:transform :
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0">

    .. , exclude-result-prefixes , XML.
    , RF_CHILD_LIST . . – .
    , id . ChilListID . .
    :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> </xsl:template>

    .. OutChilds ChilListID . , XML-, /asx:abap/asx:heap .

    ? item prg:T_DEEP_STRUCT id ChilListID . xsl:for-each .
    prg:T_DEEP_STRUCT id ChilListID :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]">
    XPath , prg:T_DEEP_STRUCT , id ChilListID .
    item: <xsl:for-each select="item">

    , , , , XSLT . :
    <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item">

    MyItem Name . :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> </xsl:for-each> </xsl:template>

    . : .
    xsl:apply-templates , select XML .
    , , ChilListID . , , RF_CHILD_LIST href, #id___ . .. href , . XPath : substring(RF_CHILD_LIST/@href,2) . .. :
    <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates>

    , :
    <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <xsl:param name="ChilListID"/> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template>

    , , , .

    , : <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" xmlns:prg="http://www.sap.com/abapxml/types/program/ZEDU_TEST_XSLT_DEEP_TRANSFORM" exclude-result-prefixes="asx sap prg" version="1.0"> <xsl:strip-space elements="*"/> <!-- , . --> <xsl:template match="/"> <List> <!-- XML --> <xsl:for-each select="/asx:abap/asx:values/TABLE/item"> <MyItem> <!-- NAMR --> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- , --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </List> </xsl:template> <!-- --> <xsl:template match="/asx:abap/asx:heap" name="OutChilds"> <!-- --> <xsl:param name="ChilListID"/> <!-- , id , --> <xsl:for-each select="prg:T_DEEP_STRUCT[@id=$ChilListID]/item"> <MyItem> <Name><xsl:value-of select="NAME"/></Name> </MyItem> <!-- --> <xsl:apply-templates select="/asx:abap/asx:heap"> <xsl:with-param name="ChilListID" select="substring(RF_CHILD_LIST/@href,2)"/> </xsl:apply-templates> </xsl:for-each> </xsl:template> </xsl:transform>


    ABAP- REPORT zedu_test_xslt_deep_transform. * " " TYPES : BEGIN OF tdeep_struct , name TYPE string , rf_child_list TYPE REF TO data , END OF tdeep_struct * " " , t_deep_struct TYPE STANDARD TABLE OF tdeep_struct WITH NON-UNIQUE DEFAULT KEY . DATA : gt_tree TYPE t_deep_struct " , gtree TYPE tdeep_struct " , gchild TYPE tdeep_struct " , ggrandchild TYPE tdeep_struct " , gxml_str TYPE string " XML , go_xml_doc TYPE REF TO cl_xml_document " XML . FIELD-SYMBOLS : <gt_child_list> TYPE t_deep_struct " , <gt_grandchild_list> TYPE t_deep_struct " . START-OF-SELECTION. * gtree-name = 'GrandParent1'. CREATE DATA gtree-rf_child_list TYPE t_deep_struct. ASSIGN gtree-rf_child_list->* TO <gt_child_list>. gchild-name = 'Child1'. APPEND gchild TO <gt_child_list>. gchild-name = 'Child2'. CREATE DATA gchild-rf_child_list TYPE t_deep_struct. ASSIGN gchild-rf_child_list->* TO <gt_grandchild_list>. ggrandchild-name = 'GrandChild1'. APPEND ggrandchild TO <gt_grandchild_list>. APPEND gchild TO <gt_child_list>. APPEND gtree TO gt_tree. CLEAR gtree. gtree-name = 'GrandParent2'. APPEND gtree TO gt_tree. * XSLT- CALL TRANSFORMATION zedu_test_xslt_deep_transform2 SOURCE table = gt_tree RESULT XML gxml_str. * XML CREATE OBJECT go_xml_doc. go_xml_doc->parse_string( gxml_str ). go_xml_doc->display( ).



    , XSLT ?


    ABAP MSDN: XSLT XPath tutorial XSLT

Source: https://habr.com/ru/post/220079/


All Articles