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 . rf_child_list field contains a reference to a generic type. <List> <MyItem> <Name>  </Name> </MyItem> <MyItem> <Name>  </Name> </MyItem> </List> rf_child_list , then we start outputting them from the first record. it is dependent - then we derive them, etc.). GrandParent1 Child1 Child2 GrandChild1 GrandParent2  <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>  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. SOURCE _ = __RESULT XML XML/ //  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( ). 
 <?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> , . . .. 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, . . .. 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 XSLTSource: https://habr.com/ru/post/220079/
All Articles