2010 Nov 02 5:35 PM
Hello,
I am trying to do an XSLT transformation for a deep structure HAP_S_PDF_DOCUMENT (see it in SE11), I have managed to achieve this. but not with perfection. i still get some redundant data and data have been experiencing Data duplication. I was hoping if you people point out the what is wrong in the transfromation. The data repeats for every once under node DATA and then under node of the refered structure name. Besides it also create a blank row even if the record is 0. I am mostly facing problem with nodes T_ELEMENTS. T_COL_CELL and T_FIELD. These are the nested structures, Can anybody help / guide me to achieve these transforamtion?
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="HAP_DOCUMENT">
<xsl:element name="HAP_DOCUMENT" namespace="">
<xsl:apply-templates select="MAIN_HEADER"/>
<xsl:apply-templates select="T_ELEMENTS"/>
<xsl:apply-templates select="T_STAT_CHG_BUTTONS"/>
<xsl:apply-templates select="S_APPRAISAL_ID"/>
<xsl:apply-templates select="S_HEADER"/>
<xsl:apply-templates select="POSITIONS"/>
<xsl:element name="STAT_CHG_BUTTON">
<xsl:value-of select="../STAT_CHG_BUTTON"/>
</xsl:element>
<xsl:element name="OFFLINE_ID">
<xsl:value-of select="OFFLINE_ID"/>
</xsl:element>
<xsl:element name="BSP_FLAG">
<xsl:value-of select="BSP_FLAG"/>
</xsl:element>
<xsl:element name="ROLE">
<xsl:value-of select="ROLE"/>
</xsl:element>
<xsl:element name="APPRAISAL_YEAR">
<xsl:value-of select="APPRAISAL_YEAR"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="MAIN_HEADER">
<xsl:element name="MAIN_HEADER">
<xsl:for-each select="ZBGAPR_FORM_HEADER">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_ELEMENTS">
<xsl:element name="T_ELEMENTS">
<xsl:for-each select="ZHAP_S_PDF_ELEMENTS">
<xsl:element name="DATA">
<xsl:apply-templates select="T_COL_CELL"/>
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_COL_CELL">
<xsl:element name="T_COL_CELL">
<xsl:for-each select="ZHAP_S_PDF_COL_CELL">
<xsl:element name="DATA">
<xsl:apply-templates select="T_FIELD"/>
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_FIELD">
<xsl:element name="T_FIELD">
<xsl:for-each select="ZHAP_S_PDF_FIELD">
<xsl:element name="DATA">
<xsl:apply-templates select="T_VAL_VALUES"/>
<xsl:apply-templates select="T_VAL_RANGES"/>
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_VAL_VALUES">
<xsl:element name="T_VAL_VALUES">
<xsl:for-each select="HAP_S_BODY_CELL_VAL_VALUES">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_VAL_RANGES">
<xsl:element name="T_VAL_RANGES">
<xsl:for-each select="HAP_S_BODY_CELL_VAL_RANGES">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_STAT_CHG_BUTTONS">
<xsl:element name="T_STAT_CHG_BUTTONS">
<xsl:for-each select="HAP_S_BODY_CELL_VAL_RANGES">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="S_APPRAISAL_ID">
<xsl:element name="S_APPRAISAL_ID">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="S_HEADER">
<xsl:element name="S_HEADER">
<xsl:apply-templates select="S_TEXTS"/>
<xsl:apply-templates select="T_APPRAISER"/>
<xsl:apply-templates select="T_APPRAISEE"/>
<xsl:apply-templates select="T_PART_APPRAISER"/>
<xsl:apply-templates select="T_OTHERS"/>
<xsl:apply-templates select="S_STATUS"/>
<xsl:apply-templates select="S_DATES"/>
<xsl:apply-templates select="S_DISPLAY"/>
</xsl:element>
</xsl:template>
<xsl:template match="POSITIONS">
<xsl:element name="POSITION">
<xsl:for-each select="ZBGHR_APR_POSITION_DET">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="S_TEXTS">
<xsl:element name="S_TEXTS">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="T_APPRAISER">
<xsl:element name="T_APPRAISER">
<xsl:for-each select="HAP_S_PDF_APPRAISER">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_APPRAISEE">
<xsl:element name="T_APPRAISEE">
<xsl:for-each select="HAP_S_PDF_APPRAISEE">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_OTHERS">
<xsl:element name="T_OTHERS">
<xsl:for-each select="HAP_S_PDF_OTHERS">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_PART_APPRAISER">
<xsl:element name="T_PART_APPRAISER">
<xsl:for-each select="HAP_S_PDF_PART_APPRAISERS">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="T_PART_APPRAISER">
<xsl:element name="T_PART_APPRAISER">
<xsl:for-each select="HAP_S_PDF_PART_APPRAISERS">
<xsl:element name="DATA">
<xsl:copy-of select="child::node()"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template match="S_STATUS">
<xsl:element name="S_STATUS">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="S_DATES">
<xsl:element name="S_DATES">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="S_DISPLAY">
<xsl:element name="S_DISPLAY">
<xsl:copy-of select="node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="STAT_CHG_BUTTON">
</xsl:template>
<xsl:template match="OFFLINE_ID">
</xsl:template>
<xsl:template match="BSP_FLAG">
</xsl:template>
<xsl:template match="ROLE">
</xsl:template>
<xsl:template match="APPRAISAL_YEAR">
</xsl:template>
</xsl:transform>
Regards,
Shishir.P
2010 Nov 03 6:36 AM