$(function () { pageContext.i18n.modTalk = 'moderation talk'; pageContext.i18n.replyToComment = 'Reply'; pageContext.i18n.modTalkEmpty = 'moderation talk is empty'; pageContext.url.getModTalk = "/comments/%25ID%25/listModTalk.json"; pageContext.url.possibleCommentRecipients = "/comments/%ID%/possibleRecipients.json"; pageContext.url.commentEdit = '/comments/%25ID%25/edit.html'; pageContext.url.commentView = '/comments/%ID%/view.html'; pageContext.i18n.commentVisibility = { 'full': 'Viewable by all users', 'op': 'Viewable by the original poster', 'mod': 'Viewable by moderators', 'opAndMod': 'Viewable by moderators and the original poster', 'other': 'Advanced visibility', 'dialogTitle': 'Comment visibility', 'selectGroups': 'Visible to groups', 'selectOther': 'Other recipients', 'selectOriginalPoster': 'Original poster', 'selectModerators': 'Moderators', 'selectAssignees': 'Asked to answer users' }; pageContext.i18n.commentMenuLabels = { 'comment-edit': 'comments.menu.edit', 'comment-delete': 'comments.menu.delete', 'comment-convert': 'comments.menu.convert' };pageContext.i18n.answer= { bestAnswer: 'Best Answer', controlBar : { accept: 'Accept', unaccept: 'Unaccept', acceptCommand: 'Accept this answer as correct', cancelAcceptedCommand: 'Remove this answers accepted status' } }; window.croles = { u: false, op: false, m: false, og: false, as: false, ag: false, dc: false, doc: false, eo: false, ea: false }; tools.init({ q: { e: false, ew: false, eo: false, r: false, ro: false, d: false, dow: false, fv: false, c: false, co: false, p: false, tm: false , ms: false, mos: false }, n: { f: false, vf: false, vfo: false, vr: false, vro: false, c: false, co: false, vu: false, vd: false, w: false, wo: false, l: false }, c: { e: false, eo: false, d: false, dow: false, ta: false, tao: false, l: false }, a: { e: false, ew: false, eo: false, d: false, dow: false, a: false, aoq: false, ao: false, tc: false, tco: false, p: false, tm: false }, pc: croles }, { tc: true, nsc: true }); commandUtils.initializeLabels(); }); Skip to Content
avatar image
-1
Former Member

XML to ABAP internal Table using XSLT transformation: repeated tags value

hi,

i am using XSLT to convert XML data to ABAP table, but for repeated tags values is not coming .

below is my input and XSLT.

input XML.

<?xml version="1.0" encoding="utf-8"?>
  <CSTMRPMTSTSRPT>
    <GRPHDR>
      <MSGID>20120504-PSR/33</MSGID>
      <CREDTTM>2012-05-04T22:34:16</CREDTTM>
      <INITGPTY>
        <ID>
          <ORGID>
            <BICORBEI>CITIUS33</BICORBEI>
          </ORGID>
        </ID>
      </INITGPTY>
    </GRPHDR>
    <ORGNLGRPINFANDSTS>
      <ORGNLMSGID>V3C-4-PVT-MESSAGEID</ORGNLMSGID>
      <ORGNLMSGNMID>PAIN.001.001.03</ORGNLMSGNMID>
      <ORGNLCREDTTM>2012-05-04T14:07:01</ORGNLCREDTTM>
      <ORGNLNBOFTXS>75</ORGNLNBOFTXS>
      <ORGNLCTRLSUM>75</ORGNLCTRLSUM>
      <GRPSTS>PART</GRPSTS>
      <STSRSNINF>
        <ADDTLINF>ACK - FILE PARTIALLY SUCCESSFUL1</ADDTLINF>
		<ADDTLINF>ACK - FILE PARTIALLY SUCCESSFUL2</ADDTLINF>
		<ADDTLINF>ACK - FILE PARTIALLY SUCCESSFUL3</ADDTLINF>
		<ADDTLINF>ACK - FILE PARTIALLY SUCCESSFUL4</ADDTLINF>
      </STSRSNINF>
    </ORGNLGRPINFANDSTS>
  </CSTMRPMTSTSRPT>

XSLT:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output encoding="iso-8859-1" indent="yes" method="xml" version="1.0"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="/">
    <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
      <asx:values>
        <CSTMRPMTSTSRPT_GET>
          <xsl:apply-templates select="//CSTMRPMTSTSRPT"/>
        </CSTMRPMTSTSRPT_GET>
      </asx:values>
    </asx:abap>
  </xsl:template>
  <xsl:template match="CSTMRPMTSTSRPT">
    <CSTMRPMTSTSRPT>
      <GRPHDR>
        <MSGID>
          <xsl:value-of select="GRPHDR/MSGID"/>
        </MSGID>
        <CREDTTM>
          <xsl:value-of select="GRPHDR/CREDTTM"/>
        </CREDTTM>
      </GRPHDR>
      <ORGNLGRPINFANDSTS>
        <ORGNLMSGID>
          <xsl:value-of select="ORGNLGRPINFANDSTS/ORGNLMSGID"/>
        </ORGNLMSGID>
        <ORGNLMSGNMID>
         <xsl:value-of select="ORGNLGRPINFANDSTS/ORGNLMSGNMID"/>
        </ORGNLMSGNMID>
        <ORGNLCREDTTM>
          <xsl:value-of select="ORGNLGRPINFANDSTS/ORGNLCREDTTM"/>
        </ORGNLCREDTTM>
        <ORGNLNBOFTXS>
          <xsl:value-of select="ORGNLGRPINFANDSTS/ORGNLNBOFTXS"/>
        </ORGNLNBOFTXS>
        <ORGNLCTRLSUM>
          <xsl:value-of select="ORGNLGRPINFANDSTS/ORGNLCTRLSUM"/>
        </ORGNLCTRLSUM>
        <GRPSTS>
          <xsl:value-of select="ORGNLGRPINFANDSTS/GRPSTS"/>
        </GRPSTS>
        <STSRSNINF>
          <xsl:for-each select="ORGNLGRPINFANDSTS/STSRSNINF/ADDTLINF">
            <ADDTLINF>
              <xsl:value-of select="ORGNLGRPINFANDSTS/STSRSNINF/ADDTLINF"/>
            </ADDTLINF>
         </xsl:for-each>
        </STSRSNINF>
      </ORGNLGRPINFANDSTS>
    </CSTMRPMTSTSRPT>
  </xsl:template>
</xsl:transform>

and out put :

 <?xml version="1.0" encoding="iso-8859-1" ?> 
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
 <asx:values>
 <CSTMRPMTSTSRPT_GET>
<CSTMRPMTSTSRPT>
 <GRPHDR>
<MSGID>20120504-PSR/33</MSGID> 
<CREDTTM>2012-05-04T22:34:16</CREDTTM> 
</GRPHDR>
<ORGNLGRPINFANDSTS>
 <ORGNLMSGID>V3C-4-PVT-MESSAGEID</ORGNLMSGID> 
 <ORGNLMSGNMID>PAIN.001.001.03</ORGNLMSGNMID> 
 <ORGNLCREDTTM>2012-05-04T14:07:01</ORGNLCREDTTM> 
 <ORGNLNBOFTXS>75</ORGNLNBOFTXS> 
 <ORGNLCTRLSUM>75</ORGNLCTRLSUM> 
 <GRPSTS>PART</GRPSTS> 
 <STSRSNINF>
   <ADDTLINF /> 
   <ADDTLINF /> 
   <ADDTLINF /> 
   <ADDTLINF /> 
 </STSRSNINF>
 </ORGNLGRPINFANDSTS>
 </CSTMRPMTSTSRPT>
</CSTMRPMTSTSRPT_GET>
</asx:values>
</asx:abap>

Since value of the <ADDTLINF> tag is not coming on the output.

please let me correct if I am making mistake in my XSLT.

Thanks & Regard,

Atique

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

3 Answers

  • Best Answer
    Mar 13, 2017 at 08:02 AM

    for-each does change the current node so you should only use xsl:value-of select ="."

    Add comment
    10|10000 characters needed characters exceeded

    • Former Member

      Thank you Rossi for ur reply.

      Now I am struggling in ABAP code, I have check my code and did not find place to correct it.

      Since I am not getting the data <ADDTLINF> tag in my ABAP internal table defined in my report.

      Below is my ABAP code:

      TYPES: BEGIN OF  GRPHDR,
               MSGID   TYPE CHAR50,
               CREDTTM TYPE CHAR20,
             END OF GRPHDR.
      TYPES: BEGIN OF ADDTLINF,
               ADDTLINF(50),
             END OF ADDTLINF.
      TYPES: BEGIN OF  STSRSNINF,
               ADDTLINF TYPE STANDARD TABLE OF ADDTLINF WITH NON-UNIQUE DEFAULT KEY,
             END OF  STSRSNINF.
      
      TYPES: BEGIN OF  ORGNLGRPINFANDSTS,
               ORGNLMSGID   TYPE CHAR50,
               ORGNLMSGNMID TYPE CHAR20,
               ORGNLCREDTTM TYPE CHAR25,
               ORGNLNBOFTXS TYPE NUMC10,
               ORGNLCTRLSUM TYPE P DECIMALS 3,
               GRPSTS       TYPE CHAR20,
               STSRSNINF    TYPE STSRSNINF,
             END OF  ORGNLGRPINFANDSTS.
      
      TYPES: BEGIN OF CSTMRPMTSTSRPT,
               GRPHDR            TYPE GRPHDR,
               ORGNLGRPINFANDSTS TYPE ORGNLGRPINFANDSTS,
             END OF CSTMRPMTSTSRPT.
      
      TYPES: BEGIN OF TY_FINAL,
              CSTMRPMTSTSRPT TYPE CSTMRPMTSTSRPT,
             END OF  TY_FINAL.
      
      DATA: IT_FINAL TYPE STANDARD TABLE OF TY_FINAL,
            WA_FINAL TYPE                   TY_FINAL.
      .........
      GET REFERENCE OF IT_FINAL INTO GS_RESULT_XML-VALUE.
        GS_RESULT_XML-NAME = 'CSTMRPMTSTSRPT_GET'.
        APPEND GS_RESULT_XML TO GT_RESULT_XML.
      
      * Perform the XSLT stylesheet
        TRY.
           CALL TRANSFORMATION ZXSLT_TEST
            SOURCE XML GT_ITAB
            RESULT (GT_RESULT_XML).
          CATCH CX_ROOT INTO GS_RIF_EX.
            GS_VAR_TEXT = GS_RIF_EX->GET_TEXT( ).
            MESSAGE GS_VAR_TEXT TYPE 'E'.
        ENDTRY.

      Above structure I am passing to the XSLT Transformation.

  • Mar 13, 2017 at 08:02 AM

    for-each does change the current node so you should only use xsl:value-of select ="."

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Mar 13, 2017 at 12:20 PM

    Thank you Rossi for ur reply.

    Now I am struggling in ABAP code, I have check my code and did not find place to correct it.

    Since I am not getting the data <ADDTLINF> tag in my ABAP internal table defined in my report.

    Below is my ABAP code:

    TYPES: BEGIN OF  GRPHDR,
             MSGID   TYPE CHAR50,
             CREDTTM TYPE CHAR20,
           END OF GRPHDR.
    TYPES: BEGIN OF ADDTLINF,
             ADDTLINF(50),
           END OF ADDTLINF.
    TYPES: BEGIN OF  STSRSNINF,
             ADDTLINF TYPE STANDARD TABLE OF ADDTLINF WITH NON-UNIQUE DEFAULT KEY,
           END OF  STSRSNINF.
    
    TYPES: BEGIN OF  ORGNLGRPINFANDSTS,
             ORGNLMSGID   TYPE CHAR50,
             ORGNLMSGNMID TYPE CHAR20,
             ORGNLCREDTTM TYPE CHAR25,
             ORGNLNBOFTXS TYPE NUMC10,
             ORGNLCTRLSUM TYPE P DECIMALS 3,
             GRPSTS       TYPE CHAR20,
             STSRSNINF    TYPE STSRSNINF,
           END OF  ORGNLGRPINFANDSTS.
    
    TYPES: BEGIN OF CSTMRPMTSTSRPT,
             GRPHDR            TYPE GRPHDR,
             ORGNLGRPINFANDSTS TYPE ORGNLGRPINFANDSTS,
           END OF CSTMRPMTSTSRPT.
    
    TYPES: BEGIN OF TY_FINAL,
            CSTMRPMTSTSRPT TYPE CSTMRPMTSTSRPT,
           END OF  TY_FINAL.
    
    DATA: IT_FINAL TYPE STANDARD TABLE OF TY_FINAL,
          WA_FINAL TYPE                   TY_FINAL.
    .........
    GET REFERENCE OF IT_FINAL INTO GS_RESULT_XML-VALUE.
      GS_RESULT_XML-NAME = 'CSTMRPMTSTSRPT_GET'.
      APPEND GS_RESULT_XML TO GT_RESULT_XML.

    * Perform the XSLT stylesheet TRY. CALL TRANSFORMATION ZXSLT_TEST SOURCE XML GT_ITAB RESULT (GT_RESULT_XML). CATCH CX_ROOT INTO GS_RIF_EX. GS_VAR_TEXT = GS_RIF_EX->GET_TEXT( ). MESSAGE GS_VAR_TEXT TYPE 'E'. ENDTRY.

    Above structure I am passing to the XSLT Transformation.

    Add comment
    10|10000 characters needed characters exceeded