OSB Dynamically XSLT transformation

Hello!
XSLT is stored in the database.
I getting xslt from db via EJB.
How can use this xslt for transformation in osb? Can use standard snippet for transformation?
Thanks,
lam

Already discussed here.
OSB: Dynamic XSLT
Thanks,
Vijay

Similar Messages

  • Dynamic XSLT Transformation for ABAP

    Hi Team,
    I have a simple requirement, but could not get it to work. Tried different posts but need some help.
    I have an input XML file as follows:
    <ITEM>
       <ITEMQUALF>
       <MATERIAL>
       <UPC>
       <VENDORMATERIAL>
    <ITEM>
    I created my internal table with the exact fields as above and created a transformation which works fine. The problem is, there are scenario's where only one tag "MATERIAL", "UPC", OR "VENDORMATERIAL" is passed in the input XML. Empty tags are not passed. For E.G.
    <ITEM>
      <ITEMQUALF>
      <UPC>
    <ITEM>
    My transformation fails in this scenario because it does not finds the MATERIAL and VENDORMATERIAL tags. I tried using the <tt:cond/> tag, but no luck. I have some specific questions:
    1) How to take care of this scenario where empty tags are not passed? (I have the Superset of all the Tags available in an XSD). A quick Sample would help me a lot because I have spent weeks breaking my head with this.
    2) Is there any other method or Option to parse a very larger input file (~40 MB) as above? I have seen the iXML ABAP methods but don't know if we should use XSLT or iXML or is there any other method. We don't have XI in our landscape. Our system is ECC 6.0, ABAP 7.0 - SP 17, Enhancement Pack 3.
    Any pointers would help a lot. Thanks for your time.
    Regards
    Sanjay

    Hello Sanjay
    In such a scenario I usually make pre-transformation filling the missing elements before the main mapping.
    Input:
    <?xml version="1.0" encoding="utf-8"?>
    <List>
      <ITEM>
        <ITEMQUALF/>
        <MATERIAL/>
        <UPC/>
        <VENDORMATERIAL/>
      </ITEM>
      <ITEM>
        <ITEMQUALF/>
        <UPC/>
      </ITEM>
      <ITEM>
        <MATERIAL/>
      </ITEM>
    </List>
    XSLT Mapping (XML to XML):
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:template match="*">
            <List>
                <xsl:for-each select="ITEM">
                    <xsl:element name="ITEM">
                        <xsl:element name="ITEMQUALF">
                            <xsl:value-of select="ITEMQUALF"/>
                        </xsl:element>
                        <xsl:element name="MATERIAL">
                            <xsl:value-of select="MATERIAL"/>
                        </xsl:element>
                        <xsl:element name="UPC">
                            <xsl:value-of select="UPC"/>   
                        </xsl:element>
                        <xsl:element name="VENDORMATERIAL">
                            <xsl:value-of select="VENDORMATERIAL"/>   
                        </xsl:element>
                    </xsl:element>
                </xsl:for-each>
            </List>
        </xsl:template>
    </xsl:stylesheet>
    Resulting XML:
    <?xml version="1.0" encoding="UTF-8"?>
    <List>
        <ITEM>
            <ITEMQUALF/>
            <MATERIAL/>
            <UPC/>
            <VENDORMATERIAL/>
        </ITEM>
        <ITEM>
            <ITEMQUALF/>
            <MATERIAL/>
            <UPC/>
            <VENDORMATERIAL/>
        </ITEM>
        <ITEM>
            <ITEMQUALF/>
            <MATERIAL/>
            <UPC/>
            <VENDORMATERIAL/>
        </ITEM>
    </List>
    Regards
      Uwe

  • OSB: Dynamic XSLT

    Hi,
    I have a need to apply stylesheet dynamically inside a proxy. I don't see an option for this in OSB, if you have ideas please respond.
    Thanks
    matt

    I hope this discussion helps:-
    Re: Insert content in appropriate place

  • How to apply an XSLT transformation in OSB

    Hello all ,
    I tried to made a simple example - that apply a simple XSLT transformation in OSB .
    I followed the http://blog.jayway.com/2010/05/07/xslt-transformations-in-oracle-service-bus/ example but still is not working in my project .
    If I apply the imported xslt over the xml in testing window is working fine .
    But the action to replace the content of the xml with the new one is not working.
    Here is the xslt
    <xsl:template match="/">
    <ns0:donateToFund>
    <arg0>
    <xsl:value-of select="/Report/CustomerName"/>
    </arg0>
    <arg1>
    <xsl:value-of select="/Report/CustomerNumber"/>
    </arg1>
    <arg2>
    <xsl:value-of select="/Report/ReportName"/>
    </arg2>
    </ns0:donateToFund>
    </xsl:template>
    and here is a xml sample
    - <Report>
    <ReportName>Customer Report</ReportName>
    <CustomerName>XXX</CustomerName>
    <CustomerNumber>3423</CustomerNumber>
    <GeneratedDate>2010-11-25 08:15:24.695</GeneratedDate>
    - <Rowset>
    - <Row>
    <Quantity>100154</Quantity>
    <CustomerPartNo>ee</CustomerPartNo>
    <eSiliconPartNo>ee</eSiliconPartNo>
    <Sector>ee</Sector>
    <Location>eee</Location>
    </Row>
    - <Row>
    In my action I put /Report as XPath ; body as variable and XSL fro transformation .
    Can anyone help to fix this ?
    Many thanks in advance,
    Stefan

    Following works for me:
    XSLT
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" omit-xml-declaration="yes"/>
    <xsl:template match="/" xmlns:ns0="http://tempuri.org">
    <ns0:donateToFund>
    <arg0>
    <xsl:value-of select="/Report/CustomerName"/>
    </arg0>
    <arg1>
    <xsl:value-of select="/Report/CustomerNumber"/>
    </arg1>
    <arg2>
    <xsl:value-of select="/Report/ReportName"/>
    </arg2>
    </ns0:donateToFund>
    </xsl:template>
    </xsl:stylesheet>Input to Proxy
         <Report>
         <ReportName>Customer Report</ReportName>
         <CustomerName>XXX</CustomerName>
         <CustomerNumber>3423</CustomerNumber>
         <GeneratedDate>2010-11-25 08:15:24.695</GeneratedDate>
         <Rowset>
         <Row>
         <Quantity>100154</Quantity>
         <CustomerPartNo>ee</CustomerPartNo>
         <eSiliconPartNo>ee</eSiliconPartNo>
         <Sector>ee</Sector>
         <Location>eee</Location>
         </Row>
         <Row>
         <Quantity>100154</Quantity>
         <CustomerPartNo>aa</CustomerPartNo>
         <eSiliconPartNo>aa</eSiliconPartNo>
         <Sector>aa</Sector>
         <Location>aaa</Location>
         </Row>
         </Rowset>
         </Report>Output of Proxy:
         <ns0:donateToFund       xmlns:ns0="http://tempuri.org">
         <arg0>XXX</arg0>
         <arg1>3423</arg1>
         <arg2>Customer Report</arg2>
         </ns0:donateToFund>I am using a single Replace action in the request pipeline.
    It works for both configs below:
    Replace [ entire node ] of [ ./* ] in [ body ] with [Xslt Resource: default/OTN/temp
    Input Document: $body/Report
    Variable Names And Bindings ]
    Or
    Replace [ Node Contents ] of [ . ] in [ body ] with [Xslt Resource: default/OTN/temp
    Input Document: $body/Report
    Variable Names And Bindings ]
    You need to ensure that if you are doing replace entire node of . in body or / in body then you should replace it with an XML whose root node is soap:Body. To achieve that you will need to change the XSL and add soap:Body as root of the output. Easier solution is to use replace contents of . body or replace entire node of ./* in body.

  • XSLT transformation in OSB Proxy Service

    Hello, I am trying to modify the answer from a WebService using an XSLT transformation in an OSB Proxy Service, but I am unable to do so. Here it is the content of the answer's body it receives:
    <ns0:getRecountUnitMovementsResponse xmlns:ns0="http://www.grifols.com/gds/interfaces/types/">
    <ns1:result xsi:type="ns4:VO_PR_UnitsMovementsSDO" xmlns:ns1="http://www.grifols.com/gds/interfaces/types/" xmlns:ns4="/com/grifols/gds/webapp/inventoryCount/units/queries/common/" xmlns:ns0="http://xmlns.oracle.com/adf/svc/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:typ="http://www.grifols.com/gds/interfaces/types/">
    <ns4:GrpId>4</ns4:GrpId>
    <ns4:MovementType>960</ns4:MovementType>
    <ns4:DcCode>165</ns4:DcCode>
    <ns4:RecDcCode>165</ns4:RecDcCode>
    <ns4:UnitItemNumber>11-0001</ns4:UnitItemNumber>
    <ns4:RecUnitItemNumber xsi:nil="true"/>
    <ns4:Bol xsi:nil="true"/>
    <ns4:CustomerId xsi:nil="true"/>
    <ns4:DocumentDate>2011-01-01T09:00:00.0+01:00</ns4:DocumentDate>
    <ns4:PostingDate>2011-01-01T09:00:00.0+01:00</ns4:PostingDate>
    <ns4:MovStatusCode>SE</ns4:MovStatusCode>
    <ns4:Quantity>10</ns4:Quantity>
    </ns1:result>
    <ns1:result xsi:type="ns4:VO_PR_UnitsMovementsSDO" xmlns:ns1="http://www.grifols.com/gds/interfaces/types/" xmlns:ns4="/com/grifols/gds/webapp/inventoryCount/units/queries/common/" xmlns:ns0="http://xmlns.oracle.com/adf/svc/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:typ="http://www.grifols.com/gds/interfaces/types/">
    <ns4:GrpId>1</ns4:GrpId>
    <ns4:MovementType>913</ns4:MovementType>
    <ns4:DcCode>165</ns4:DcCode>
    <ns4:RecDcCode>165</ns4:RecDcCode>
    <ns4:UnitItemNumber>11-0001</ns4:UnitItemNumber>
    <ns4:RecUnitItemNumber xsi:nil="true"/>
    <ns4:Bol xsi:nil="true"/>
    <ns4:CustomerId xsi:nil="true"/>
    <ns4:DocumentDate>2011-01-01T09:00:00.0+01:00</ns4:DocumentDate>
    <ns4:PostingDate>2011-01-01T09:00:00.0+01:00</ns4:PostingDate>
    <ns4:MovStatusCode>SE</ns4:MovStatusCode>
    <ns4:Quantity>15</ns4:Quantity>
    </ns1:result>
    <ns1:result xsi:type="ns4:VO_PR_UnitsMovementsSDO" xmlns:ns1="http://www.grifols.com/gds/interfaces/types/" xmlns:ns4="/com/grifols/gds/webapp/inventoryCount/units/queries/common/" xmlns:ns0="http://xmlns.oracle.com/adf/svc/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:typ="http://www.grifols.com/gds/interfaces/types/">
    <ns4:GrpId>2</ns4:GrpId>
    <ns4:MovementType>913</ns4:MovementType>
    <ns4:DcCode>165</ns4:DcCode>
    <ns4:RecDcCode>165</ns4:RecDcCode>
    <ns4:UnitItemNumber>21-00001</ns4:UnitItemNumber>
    <ns4:RecUnitItemNumber xsi:nil="true"/>
    <ns4:Bol xsi:nil="true"/>
    <ns4:CustomerId xsi:nil="true"/>
    <ns4:DocumentDate>2011-01-01T09:00:00.0+01:00</ns4:DocumentDate>
    <ns4:PostingDate>2011-01-01T09:00:00.0+01:00</ns4:PostingDate>
    <ns4:MovStatusCode>SE</ns4:MovStatusCode>
    <ns4:Quantity>25</ns4:Quantity>
    </ns1:result>
    <ns1:result xsi:type="ns4:VO_PR_UnitsMovementsSDO" xmlns:ns1="http://www.grifols.com/gds/interfaces/types/" xmlns:ns4="/com/grifols/gds/webapp/inventoryCount/units/queries/common/" xmlns:ns0="http://xmlns.oracle.com/adf/svc/types/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:typ="http://www.grifols.com/gds/interfaces/types/">
    <ns4:GrpId>3</ns4:GrpId>
    <ns4:MovementType>959</ns4:MovementType>
    <ns4:DcCode>165</ns4:DcCode>
    <ns4:RecDcCode>165</ns4:RecDcCode>
    <ns4:UnitItemNumber>11-0001</ns4:UnitItemNumber>
    <ns4:RecUnitItemNumber xsi:nil="true"/>
    <ns4:Bol xsi:nil="true"/>
    <ns4:CustomerId xsi:nil="true"/>
    <ns4:DocumentDate>2011-01-01T09:00:00.0+01:00</ns4:DocumentDate>
    <ns4:PostingDate>2011-01-01T09:00:00.0+01:00</ns4:PostingDate>
    <ns4:MovStatusCode>SE</ns4:MovStatusCode>
    <ns4:Quantity>50</ns4:Quantity>
    </ns1:result>
    </ns0:getRecountUnitMovementsResponse>
    And what I am trying to do is replace all the "/com/grifols/gds/webapp/inventoryCount/units/queries/common/" for "http://www.something.else". I have succeeded replacing it if the attribute name is "xmlns" instead of "xmlns:ns4". However, that ":ns4" changes everything and I can't get it to work. Does anyone know how to do so?
    Thank you in advance. Don't hesitate to ask me for more information you may need.
    Jordi

    By the way, this is the XSLT transformation that works fine if we remove that ":ns4" from the attribute name:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:source="/com/grifols/gds/webapp/inventoryCount/units/queries/common/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="2.0">
    <xsl:output method="xml" encoding="iso-8859-1" indent="yes"/>
    <xsl:template match="source:*">
    <xsl:element name="{local-name()}" namespace="http://www.something.else">
    <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
    </xsl:template>
    <xsl:template match="@*|node()">
    <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    </xsl:template>
    </xsl:stylesheet>

  • OSB XSLT Transform in Service Orchestration

    I am trying to use the function op:subtract-dayTimeDuration-from-dateTime within a stylesheet within a stage in the OSB. Is it possible to use this function in a stylesheet? I get an error after using the test console to test the XSLT resource:
    Error executing the XSLT transformation: java.lang.NoSuchMethodException: For extension function, could not find method java.lang.String.dateTime([ExpressionContext,] ).
    Here is the relevant part of the stylesheet:
    <?xml version="1.0"?>
    <xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:op="http://www.w3.org/TR/xpath-functions"
    xmlns:xdt="http://www.w3.org/TR/xpath-datatypes"
    xmlns:xf="http://www.w3.org/TR/xquery-operators"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" >
                   <timeframe>
                        <begin>
    <xsl:variable name="now" select="op:subtract-dayTimeDuration-from-dateTime(xs:dateTime('2003-01-02T01:01:00'), xf:dayTimeDuration('P1DT1M'))" />
    <xsl:value-of select="$now" />
                        </begin>
                   </timeframe>
    </xsl:stylesheet>

    Hi,
    Is this question posted to wrong Forum? I have not received any response yet. Request your help.
    Regards....
    Edited by: LearningSOA on Aug 15, 2011 3:19 PM
    Edited by: LearningSOA on Aug 16, 2011 11:48 AM

  • How to iterate through each node in REPLACE stage/XSLT transform/OSB

    I need to iterate through a xml document in a 'REPLACE' stage in a OSB message flow and have each <courseTemplate> transformed into a new xml document. The XSLT transform works correctly using the XSLT Resource Tester so I know the stylesheet works.
    ex: input data:
    <enterprise>
    <courseTemplate><sourcedId>100001-01</sourcedId><label><language>en-US</language><text>100001-01</text></label><title><language>en-US</language><text>Lower Division General Credit</text></title><catalogDescription><shortDescription>Lower Division General Credit</shortDescription><longDescription>Lower Division General Credit</longDescription></catalogDescription><courseNumber><language>en-US</language><text>XFCR 2999SA</text></courseNumber><status>Active</status><dataSource>CS</dataSource><extension><extensionField><fieldName>Mode</fieldName><fieldType>String</fieldType><fieldValue>C</fieldValue></extensionField></extension></courseTemplate>
    <courseTemplate><sourcedId>100001-02</sourcedId><label><language>en-US</language><text>100001-02</text></label><title><language>en-US</language><text>Lower Division General Credit</text></title><catalogDescription><shortDescription>Lower Division General Credit</shortDescription><longDescription>Lower Division General Credit</longDescription></catalogDescription><courseNumber><language>en-US</language><text>XFCR 2999TC</text></courseNumber><status>Active</status><dataSource>CS</dataSource><extension><extensionField><fieldName>Mode</fieldName><fieldType>String</fieldType><fieldValue>C</fieldValue></extensionField></extension></courseTemplate>
    </enterprise>
    1) the output data should look like:
    <enterprise      xsi:noNamespaceSchemaLocation="import_xml4.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <group      recstatus="2">
         <sourcedid>
         <id>100001-01</id>
         </sourcedid>
         <grouptype>
         <typevalue      level="4">Course Template</typevalue>
         </grouptype>
         <description>
         <short>100001-01</short>
         <long>Lower Division General Credit</long>
         </description>
         <relationship      relation="1">
         <sourcedid>
         <id>Uh</id>
         </sourcedid>
         <label/>
         </relationship>
         <extension>
         <path/>
         </extension>
         </group>
         <group      recstatus="2">
         <sourcedid>
         <id>100001-02</id>
         </sourcedid>
         <grouptype>
         <typevalue      level="4">Course Template</typevalue>
         </grouptype>
         <description>
         <short>100001-02</short>
         <long>Lower Division General Credit</long>
         </description>
         <relationship      relation="1">
         <sourcedid>
         <id>Uh</id>
         </sourcedid>
         <label/>
         </relationship>
         <extension>
         <path/>
         </extension>
         </group>
    </enterprise>
    2) what is happening is the first node is being repeated:
    <enterprise      xsi:noNamespaceSchemaLocation="import_xml4.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <group      recstatus="2">
         <sourcedid>
         <id>100001-01</id>
         </sourcedid>
         <grouptype>
         <typevalue      level="4">Course Template</typevalue>
         </grouptype>
         <description>
         <short>100001-01</short>
         <long>Lower Division General Credit</long>
         </description>
         <relationship      relation="1">
         <sourcedid>
         <id>Uh</id>
         </sourcedid>
         <label/>
         </relationship>
         <extension>
         <path/>
         </extension>
         </group>
         <group      recstatus="2">
         <sourcedid>
         <id>100001-01</id>
         </sourcedid>
         <grouptype>
         <typevalue      level="4">Course Template</typevalue>
         </grouptype>
         <description>
         <short>100001-01</short>
         <long>Lower Division General Credit</long>
         </description>
         <relationship      relation="1">
         <sourcedid>
         <id>Uh</id>
         </sourcedid>
         <label/>
         </relationship>
         <extension>
         <path/>
         </extension>
         </group>
    </enterprise>
    3) here is what I am using in the replace stage:
    XPath Expression Editor      : Request Pipeline - replace
    //enterprise/courseTemplate
    //enterprise/courseTemplate
    in variable: body with Xslt: SAIP_OSB_Requester/CourseTemplateSAIP_XSLT
    Input Document: $body
    Variable Names And Bindings: saipCourseTemplatesParam - $body
    4) can you see what I need to change?
    Edited by: user11960867 on Jul 5, 2011 10:58 AM

    Here is the stylesheet I am using. I wonder if it is wrong if I am working with each current node:
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
         <xsl:output method="xml" indent="yes" />
    <xsl:variable name="saipCourseTemplates" />
    <xsl:param name="saipCourseTemplatesParam" />
         <xsl:template match="/enterprise">
              <enterprise xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="import_xml4.xsd">
                   <xsl:apply-templates select="courseTemplate" />
              </enterprise>
         </xsl:template>
         <xsl:template match="courseTemplate">
              <group recstatus="2">
                   <sourcedid>
                        <id>
                             <xsl:value-of select="sourcedId" />
                        </id>
                   </sourcedid>
                   <grouptype>
                        <typevalue level="4">Course Template</typevalue>
                   </grouptype>
                   <description>
                        <short>
                             <xsl:value-of select="sourcedId" />
                        </short>
                        <long>
                        <xsl:value-of select="catalogDescription/longDescription" disable-output-escaping="no" />
                        </long>
                   </description>
                   <relationship relation="1">
                   <sourcedid>
                   <id>Testing</id>
                   </sourcedid>
                   <label></label>
                   </relationship>
                   <extension>
                   <path></path>
                   </extension>
              </group>
         </xsl:template>
    </xsl:stylesheet>

  • Dynamic XSLT processing - parameters?

    Goal: I want my XSLT mapping to be dynamic, because I expect a certain number of fields with values in my XML, but these field names may change over time, so I have to make it dynamic.
    Step 1: I made my output dynamic by using dynamic internal tables (field-symbols). So that I can change my internal tables easily with a custom-table. Done!
    Step 2: My XSLT transformation should be handled dynamically. Not done!
    Is this step 2 even possible?
    I was thinking of passing PARAMETERS to my CALL TRANSFORMATION statement so that I can let know what fieldnames my XSLT can expect, but then the question remains if the ZTEST transformation can read this out for my purpose.
    CALL TRANSFORMATION ztest
    PARAMETERS (gt_param)
    SOURCE XML gt_itab
    RESULT (gt_result_xml).
    ...knowing that gt_param can only by of type
    ABAP_TRANS_PARMBIND_TAB (for specifying strings) or
    ABAP_TRANS_OBJBIND_TAB (for specifying object references) or
    ABAP_TRANS_PARM_OBJ_BIND_TAB (for specifying data references).
    Thus, is it possible to make my TRANSFORMATION handling dynamic (by using PARAMETERS or something else)? If yes, does anybody know how. Examples are appreciated.
    Mehmet Metin

    This can be done with basic XSLT. Use the XPath expression '*' to apply a template to each child of a given node (for example, if a node represents an ABAP structure, its children represent its components). In the template, use the XPath-function 'local-name()' to retrieve the name of the current element without namespace. Now you should have everything you need for creating the result tree.
    For a working example in our XI system, see the following template:
    <xsl:template match="ZMEDI_MELDUNG_DET">
      <xsl:element name="{SEGID_N}">
        <xsl:element name='SEGID_N'>
          <xsl:value-of select="*[position()=1]"/>
        </xsl:element>
        <xsl:for-each select="*[position()>1 and text() != '']">
          <xsl:element name="{local-name()}">
            <xsl:value-of select="."/>
          </xsl:element>
        </xsl:for-each>
      </xsl:element>
    </xsl:template>
    Here, I copy the components of the ABAP source structure ZMEDI_MELDUNG_DET (the structure name was fixed in my case, but it's easy to identify it without specifying its name, if it should be given at runtime only) into a result tree fragment with parent node name = the content of the ABAP component SEGID_N, the first child having the fixed name SEGID_N with (redundant) its value again, and after that all the components of the source structure, whatever they may be, if their content is non-empty (this was a format required by another non-SAP-development team).
    Regards,
    Rüdiger

  • Dynamic XSLT source code generation based upon internal table

    Hi,
    Is there anyway to generate dynamic XSLT source code based upon final structure of output internal table and call dynamic generated XSLT in program?
    CALL TRANSFORMATION z_transformation
                PARAMETERS
                 p_shared_string = lo_shared_str_nodeset
                SOURCE XML g_sheet_data
                RESULT lt_data = i_data[].
    Source code example of XSLT transformation -
    <xsl:template match="/">
         <asx:abap version="1.0">
           <asx:values>
             <LT_DATA>   "Internal table
               <xsl:for-each select="ss:worksheet/ss:sheetData/ss:row">
                 <xsl:if test="position() &gt; 1">
                   <item>
                     <FIELD1>
                       <xsl:variable name="cell_id" select="concat('A', position())"/>
                       <xsl:variable name="v_index" select="ss:c[@r=$cell_id][@t='s']/ss:v"/>
                       <xsl:if test="$v_index">
                         <xsl:value-of select="$V_SHARED_STRING/sst/si[$v_index + 1]/t"/>
                       </xsl:if>
                       <xsl:if test="not($v_index)">
                         <xsl:value-of select="ss:c[@r=$cell_id]/ss:v"/>
                       </xsl:if>
                     </FIELD1>
                 </item>
                 </xsl:if>
               </xsl:for-each>
             </LT_DATA> "internal table
           </asx:values>
         </asx:abap>
       </xsl:template>
    </xsl:transform>

    In addition,
    We are converting binary data of excel from application server into internal table but currently we created two XSLT transformation to achieve this one for deleting name space and other for converting data into internal table format.
    We want to make our source code for future use also,Is there anyway to generate XSLT source code dynamically?Above mentioned code is snippet of data extracting which we are doing but this transformation is hard coded.
    Any help is appreciated.
    BR,
    Praveen

  • Error in ABAP XSLT transformation

    Hi,
    Im trying to upload some data from XML to abap. But Im getting an error while transforming xml data to internal table.
    Here are the details.
    XML:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
      <!--  Edited by XMLSpy® -->
    <?xml-stylesheet type="text/xsl" href="ABAP1.xsl"?>
    <conceptRevDecisionXml>
    <projectInfo>
    <projectId>P000755</projectId>
    <stage>CON</stage>
    <country>Ethiopia</country>
    <region>AFRICA</region>
    <teamleader>Priya Agarwal</teamleader>
    <teamleaderfirstname>Priya</teamleaderfirstname>
    <teamleaderlastname>Agarwal</teamleaderlastname>
    <actionType>X</actionType>
    </projectInfo>
    </conceptRevDecisionXml>
    XSLT: Transformation
    <xsl:transform version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:sapxsl="http://www.sap.com/sapxsl"
    >
    <xsl:strip-space elements="*"></xsl:strip-space>
    <xsl:template match="/">
        <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
          <asx:values>
            <PROJID>
              <xsl:apply-templates select="//conceptRevDecisionXml"></xsl:apply-templates>
            </PROJID>
          </asx:values>
        </asx:abap>
    </xsl:template>
    <xsl:template match="conceptRevDecisionXml">
          <xsl:for-each select="projectInfo">
           <xsl:value-of select="projectId"></xsl:value-of>
           <xsl:value-of select="stage"></xsl:value-of>
           <xsl:value-of select="country "></xsl:value-of>
           <xsl:value-of select="region"></xsl:value-of>
           <xsl:value-of select="teamleader"></xsl:value-of>
           <xsl:value-of select="teamleaderfirstname"></xsl:value-of>
           <xsl:value-of select="teamleaderlastname"></xsl:value-of>
            <xsl:value-of select="actionType"></xsl:value-of>
            </xsl:for-each>
        </xsl:template>
    </xsl:transform>
    Once I run the program...Im getting an error saying...ABAP XML Formatting error in XML node..
    Im new to ABAP-XML parsing..Pls help me where Im going wrong..
    Thanks in advance.
    Regards,
    Priya

    Hi Priya,
    you can try with the below,
    1) Create a local ITAB with the structure of the XML,
    TYPES: BEGIN OF t_data,
            projectid           TYPE char30,
            stage               TYPE char30,
            country             TYPE char30,
            region              TYPE char30,
            teamleader          TYPE char30,
            teamleaderfirstname TYPE char30,
            teamleaderlastname  TYPE char30,
            actiontype          TYPE char30,
           END OF t_data.
    2) Create an XSLT prog in "STRANS" with the below code,
    <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="/">
    <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
    <asx:values>
    <L_DATA>
    <xsl:apply-templates select="//projectInfo"/>
    </L_DATA>
    </asx:values>
    </asx:abap>
    </xsl:template>
    <xsl:template match="projectInfo">
    <conceptRevDecisionXml>
    <PROJECTID>
    <xsl:value-of select="projectId"/>
    </PROJECTID>
    <STAGE>
    <xsl:value-of select="stage"/>
    </STAGE>
    <COUNTRY>
    <xsl:value-of select="country"/>
    </COUNTRY>
    <REGION>
    <xsl:value-of select="region"/>
    </REGION>
    <TEAMLEADER>
    <xsl:value-of select="teamleader"/>
    </TEAMLEADER>
    <TEAMLEADERFIRSTNAME>
    <xsl:value-of select="teamleaderfirstname"/>
    </TEAMLEADERFIRSTNAME>
    <TEAMLEADERLASTNAME>
    <xsl:value-of select="teamleaderlastname"/>
    </TEAMLEADERLASTNAME>
    <ACTIONTYPE>
    <xsl:value-of select="actionType"/>
    </ACTIONTYPE>
    </conceptRevDecisionXml>
    </xsl:template>
    </xsl:transform>
    3) Call the transformation as shown below,
    CALL TRANSFORMATION zxslt_project ---> "Name of the XSLT prog created above
    SOURCE XML l_xml_str                           ---> Source XML string
    RESULT l_data = l_data.                          ---> ITAB as in step 1 above
    Regards,
    Chen

  • Error when applying a XSLT transformation: No valid XSLT pro

    Dear All,
    I am getting following error when opening the "General Supplier Data" from Pre-Select Supplier.
    Error Message: "Error message: Error when applying a XSLT transformation: No valid XSLT program supplied"
    I have already read the related threads on SDN and checked the SAP Note 883896 and others. Even tried running the program UXS_DEL_NAVIGATION_NODE and UXS_ADD_MISSING_XSLT_NAME. But not able to solve the issue.
    Kindly Help.
    Regards,
    Sagar

    Hi Masa,
    Thanks for reply. I have checked this note. As note suggests, S_DEVELOP auth object is assigned to the user. and it has value *.
    Do I need to check anything else?
    Regards,
    Sagar

  • Error when applying a XSLT transformation

    central instance
    transaction SURVEY
    Extras->Target Group Hierarchy-> Import from file
    select file
    Error when applying a XSLT transformation
    dialog instance working

    Hello Andrey Kuryanov,
    Could make sure you describe the problem more clear as much as you can so that community can help you better.
    Please provide more details with more detailed steps and actual error messge.
    Thanks
    Raja Pamireddy
    Moderator

  • UTF-8 encoding in XSLT transformation

    Hello,
    I have a problem with a transformation of an ABAP structure into XML. I use the XSLT transformation for this.
    My XSLT starts like this:
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:strip-space elements="*"/>
      <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
        <asx:values>
    I tried many settings I could find posted on the internet, but I did not find one that would allow encoding to UTF-8.
    It always encodes to iso-8859-1 which my interface partner cannot read.
    Does anyone know a way to force encoding to UTF-8?
    Adding a command like <xsl:output encoding="utf-8"/> did not help.
    Thanks a lot!
           J. Euler

    Hello!
    I think I just solved the problem taking a different approach.
    In a note here on SDN, a guy from SAP wrote, that the SAP XSLT processor is not able to code anything but the system's default to a string, BUT that it is able to code it to an xstring.
    All I did now is add the tag  
    <xsl:output encoding="utf-8" indent="yes" method="xml"/>
    to my xslt program and change the coding in the program accordingly.
    The program code is now:
      DATA: tempxstring TYPE xstring,
            temp_length TYPE i,
            conv      TYPE REF TO cl_abap_conv_in_ce.
      CLEAR tempxstring.
      TRY.
          CALL TRANSFORMATION
              zxxje_tst_xslt
            SOURCE omsregdatawebservice = wa_data
            RESULT XML tempxstring.
        CATCH cx_sy_conversion_base64.
        CATCH cx_sy_conv_illegal_date_time.
      ENDTRY.
      IF tempxstring IS NOT INITIAL.
        CLEAR: conv, temp_length, string_xml_result.
        conv = cl_abap_conv_in_ce=>create( input = tempxstring ).
        conv->read( IMPORTING data = string_xml_result len = temp_length ).
      ENDIF.
    Thanks anyways for all your help!
    regards,
          Johannes Euler

  • ABAP XSLT transformation - XML to deep structure/nested standard table

    Hi all,
    I was struggling with this topic recently and couldn't find a single working example or description of a possible solution. So now that I've sorted it out, I did a quick example to elustrate how it works. Here is the code with XML embeded in it and the XSLT follows:
    <HR>
    <PRE>
    *& Report  Z_XML2ABAP
    *& Author: Jayanta Roy
    *& Date: 03/02/2010
    REPORT  z_xml2abap.
    DATA input_xml TYPE string.
    TYPES: BEGIN OF t_address,
            house_no TYPE string,
            street_name TYPE string,
            city_name TYPE string,
            phone_no TYPE string,
          END OF t_address.
    TYPES: t_addresses TYPE STANDARD TABLE OF t_address with NON-UNIQUE KEY house_no.
    TYPES: BEGIN OF t_person,
            firstname TYPE string,
            surname TYPE string,
            addresses TYPE t_addresses,
          END OF t_person.
    input_xml = '&lt;Friends&gt;' &&
      '&lt;People&gt;' &&
        '&lt;FirstName&gt;Homer&lt;/FirstName&gt;' &&
        '&lt;Surname&gt;Simpson&lt;/Surname&gt;' &&
          '&lt;Address&gt;' &&
            '&lt;HouseNo&gt;123&lt;/HouseNo&gt;' &&
            '&lt;Street&gt;Evergreen Terrace&lt;/Street&gt;' &&
            '&lt;City&gt;Springfield&lt;/City&gt;' &&
            '&lt;PhoneNo&gt;011212321&lt;/PhoneNo&gt;' &&
          '&lt;/Address&gt;' &&
          '&lt;Address&gt;' &&
            '&lt;HouseNo&gt;7G&lt;/HouseNo&gt;' &&
            '&lt;Street&gt;Neuclear Power Plant&lt;/Street&gt;' &&
            '&lt;City&gt;Spring Field&lt;/City&gt;' &&
            '&lt;PhoneNo&gt;911&lt;/PhoneNo&gt;' &&
          '&lt;/Address&gt;' &&
      '&lt;/People&gt;' &&
      '&lt;People&gt;' &&
         '&lt;FirstName&gt;Bart&lt;/FirstName&gt;' &&
         '&lt;Surname&gt;Simpson&lt;/Surname&gt;' &&
           '&lt;Address&gt;' &&
             '&lt;HouseNo&gt;123x&lt;/HouseNo&gt;' &&
             '&lt;Street&gt;Evergreen Terracex&lt;/Street&gt;' &&
             '&lt;City&gt;Springfieldx&lt;/City&gt;' &&
             '&lt;PhoneNo&gt;011212321x&lt;/PhoneNo&gt;' &&
           '&lt;/Address&gt;' &&
       '&lt;/People&gt;' &&
    '&lt;/Friends&gt;' .
    DATA lt_person TYPE STANDARD TABLE OF t_person.
    TRY.
        CALL TRANSFORMATION xslt_person
        SOURCE XML input_xml
        RESULT  all_people = lt_person.
      CATCH cx_root.
        WRITE 'Problemo!'.
    ENDTRY.
    WRITE 'Now, debug the program to see the values read from the XML'.
    </PRE>
    <HR>
    and here is the XSLT Transformation program (xslt_person):
    <HR>
    <PRE>
    &lt;xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                        xmlns:sap="http://www.sap.com/sapxsl" version="1.0"&gt;
      &lt;xsl:strip-space elements="*"/&gt;
      &lt;xsl:template match="/"&gt;
        &lt;asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"&gt;
          &lt;asx:values&gt;
            &lt;ALL_PEOPLE&gt;
              &lt;xsl:apply-templates select="//People"/&gt;
            &lt;/ALL_PEOPLE&gt;
          &lt;/asx:values&gt;
        &lt;/asx:abap&gt;
      &lt;/xsl:template&gt;
      &lt;xsl:template match="People"&gt;
        &lt;ALLMYFRIENDS&gt;  &lt;!This element name is not relevent... needed to just group the loop&gt;
          &lt;FIRSTNAME&gt;
            &lt;xsl:value-of select="FirstName"/&gt;
          &lt;/FIRSTNAME&gt;
          &lt;SURNAME&gt;
            &lt;xsl:value-of select="Surname"/&gt;
          &lt;/SURNAME&gt;
          &lt;ADDRESSES&gt;
            &lt;xsl:for-each select="Address"&gt;
              &lt;ADDRESS&gt; &lt;!This element name is not relevent... needed to just group the loop&gt;
                &lt;HOUSE_NO&gt;
                  &lt;xsl:value-of select="HouseNo"/&gt;
                &lt;/HOUSE_NO&gt;
                &lt;STREET_NAME&gt;
                  &lt;xsl:value-of select="Street"/&gt;
                &lt;/STREET_NAME&gt;
                &lt;CITY_NAME&gt;
                  &lt;xsl:value-of select="City"/&gt;
                &lt;/CITY_NAME&gt;
                &lt;PHONE_NO&gt;
                  &lt;xsl:value-of select="PhoneNo"/&gt;
                &lt;/PHONE_NO&gt;
              &lt;/ADDRESS&gt;
            &lt;/xsl:for-each&gt;
          &lt;/ADDRESSES&gt;
        &lt;/ALLMYFRIENDS&gt;
      &lt;/xsl:template&gt;
    &lt;/xsl:transform&gt;
    </PRE>
    <HR>
    HTH,
    Jayanta.

    thanks a LOT Jayanta..
    I was looking for an XSLT example for some time.. this one atleast got me started in the right direction..
    THANKS

  • XSLT transformation in XML to ABAP: special characters issue

    Hi,
    I am parsing well-formed XML file that has the following data (:
    <projects><project><name>Wallis &amp; Futuna</name></project></projects>
    I use XSLT transformation:
    <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="projects">
        <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
            <PROJECTS>
              <xsl:for-each select="project">
                <PROJECT>
                  <NAME>
                    <xsl:value-of select="name"/>
                  </NAME>
                </PROJECT>
              </xsl:for-each>
            </PROJECTS>
          </asx:values>
        </asx:abap>
      </xsl:template>
    </xsl:transform>
    If I use the above example without &amp;amp; everything works fine, but the original XML fails with exception CX_XSLT_DESERIALIZATION_ERROR and message "Error during deserialization". Googling around did not give an answer.
    Any words of wisdom?
    Edited by: Alexei Isaev on Apr 26, 2011 5:04 AM
    Edited by: Alexei Isaev on Apr 26, 2011 5:05 AM

    Hi,
    Please visit the following link for reference.
    http://help.sap.com/abapdocu_70/en/ABAPCALL_TRANSFORMATION.htm
    Thanks & Regards,
    Harish

Maybe you are looking for