cancel
Showing results for 
Search instead for 
Did you mean: 

Another XSLT issue

Former Member
0 Kudos

Hi,

I'm trying to convert an internal ABAP table to XML using CALL TRANSFORMATION. Form what I understand, I have to do this in two steps: from ABAP table to asXML, then from asXML to "real" XML. I have two conversions, but only the first one seems to work:

CALL TRANSFORMATION (`ID`)

SOURCE MYTABLE = wt_mytable[]

RESULT XML xml_out.

This one functions flawlessly; I can see the results by using the following call in my BSP:

runtime->server->response->set_data( data = xml_out ).

However, when trying to do the final step, from asXML to XML, I hit upon problems. I've created an XSLT program, but it does not seem to function.

The output from my first transformation looks like this:

<?xml version="1.0" encoding="utf-8" ?>

- <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">

- <asx:values>

- <REFGROUPS>

...

Now, if I debug my XSLT and delete the <asx:abap> tags, it works. My question is therefore: should my XSLT transformation handle these tags as elements, like this:

<xsl:template match="/">

<Root>

<xsl:for-each select="asx:abap/asx:values">

<xsl:for-each select="REFGROUPS">

...or should I start my first "for-each" loop at the REFGROUPS tag? Either way, it doesn't work. Has anyone any sample code for handling asXML, or, better still, is there a working example of how to convert ABAP tables into real XML (or even HTML)?

Trond

Accepted Solutions (0)

Answers (2)

Answers (2)

athavanraja
Active Contributor
0 Kudos

Code sample:

XML file generated by call transformation from ITAB.

[code]<?xml version="1.0" encoding="utf-8"?>

<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">

<asx:values>

<FLIGHT_LIST>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>3577</CONNECTID>

<FLIGHTDATE>1995-04-28</FLIGHTDATE>

<AIRPORTFR>FCO</AIRPORTFR>

<CITYFROM>ROM</CITYFROM>

<AIRPORTTO>FRA</AIRPORTTO>

<CITYTO>FRANKFURT</CITYTO>

<DEPTIME>07:05:00</DEPTIME>

<ARRTIME>09:05:00</ARRTIME>

<ARRDATE>1995-04-28</ARRDATE>

<PRICE>6000.0</PRICE>

<CURR>LIT</CURR>

<CURR_ISO></CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>2402</CONNECTID>

<FLIGHTDATE>1997-08-21</FLIGHTDATE>

<AIRPORTFR>FRA</AIRPORTFR>

<CITYFROM>FRANKFURT</CITYFROM>

<AIRPORTTO>SXF</AIRPORTTO>

<CITYTO>BERLIN</CITYTO>

<DEPTIME>10:30:00</DEPTIME>

<ARRTIME>11:35:00</ARRTIME>

<ARRDATE>1997-08-21</ARRDATE>

<PRICE>555.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>2402</CONNECTID>

<FLIGHTDATE>1997-08-22</FLIGHTDATE>

<AIRPORTFR>FRA</AIRPORTFR>

<CITYFROM>FRANKFURT</CITYFROM>

<AIRPORTTO>SXF</AIRPORTTO>

<CITYTO>BERLIN</CITYTO>

<DEPTIME>10:30:00</DEPTIME>

<ARRTIME>11:35:00</ARRTIME>

<ARRDATE>1997-08-22</ARRDATE>

<PRICE>590.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>2402</CONNECTID>

<FLIGHTDATE>1997-08-25</FLIGHTDATE>

<AIRPORTFR>FRA</AIRPORTFR>

<CITYFROM>FRANKFURT</CITYFROM>

<AIRPORTTO>SXF</AIRPORTTO>

<CITYTO>BERLIN</CITYTO>

<DEPTIME>10:30:00</DEPTIME>

<ARRTIME>11:35:00</ARRTIME>

<ARRDATE>1997-08-25</ARRDATE>

<PRICE>490.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>2402</CONNECTID>

<FLIGHTDATE>1997-08-30</FLIGHTDATE>

<AIRPORTFR>FRA</AIRPORTFR>

<CITYFROM>FRANKFURT</CITYFROM>

<AIRPORTTO>SXF</AIRPORTTO>

<CITYTO>BERLIN</CITYTO>

<DEPTIME>10:30:00</DEPTIME>

<ARRTIME>11:35:00</ARRTIME>

<ARRDATE>1997-08-30</ARRDATE>

<PRICE>485.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>0455</CONNECTID>

<FLIGHTDATE>1995-06-06</FLIGHTDATE>

<AIRPORTFR>SFO</AIRPORTFR>

<CITYFROM>SAN FRANCISCO</CITYFROM>

<AIRPORTTO>FRA</AIRPORTTO>

<CITYTO>FRANKFURT</CITYTO>

<DEPTIME>15:00:00</DEPTIME>

<ARRTIME>10:30:00</ARRTIME>

<ARRDATE>1995-06-06</ARRDATE>

<PRICE>1090.0</PRICE>

<CURR>USD</CURR>

<CURR_ISO>USD</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>0455</CONNECTID>

<FLIGHTDATE>1996-12-31</FLIGHTDATE>

<AIRPORTFR>SFO</AIRPORTFR>

<CITYFROM>SAN FRANCISCO</CITYFROM>

<AIRPORTTO>FRA</AIRPORTTO>

<CITYTO>FRANKFURT</CITYTO>

<DEPTIME>15:00:00</DEPTIME>

<ARRTIME>10:30:00</ARRTIME>

<ARRDATE>1996-12-31</ARRDATE>

<PRICE>1919.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>0454</CONNECTID>

<FLIGHTDATE>1995-11-17</FLIGHTDATE>

<AIRPORTFR>FRA</AIRPORTFR>

<CITYFROM>FRANKFURT</CITYFROM>

<AIRPORTTO>SFO</AIRPORTTO>

<CITYTO>SAN FRANCISCO</CITYTO>

<DEPTIME>10:10:00</DEPTIME>

<ARRTIME>12:30:00</ARRTIME>

<ARRDATE>1995-11-17</ARRDATE>

<PRICE>1499.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>LH</AIRLINEID>

<AIRLINE>Lufthansa</AIRLINE>

<CONNECTID>0400</CONNECTID>

<FLIGHTDATE>1995-02-28</FLIGHTDATE>

<AIRPORTFR>FRA</AIRPORTFR>

<CITYFROM>OSAKA</CITYFROM>

<AIRPORTTO>JFK</AIRPORTTO>

<CITYTO>NEW YORK</CITYTO>

<DEPTIME>10:10:00</DEPTIME>

<ARRTIME>11:34:00</ARRTIME>

<ARRDATE>1995-02-28</ARRDATE>

<PRICE>899.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

<BAPISFLDAT>

<AIRLINEID>SQ</AIRLINEID>

<AIRLINE>Singapore Airlines</AIRLINE>

<CONNECTID>0026</CONNECTID>

<FLIGHTDATE>1995-02-28</FLIGHTDATE>

<AIRPORTFR>FRA</AIRPORTFR>

<CITYFROM>FRANKFURT</CITYFROM>

<AIRPORTTO>JFK</AIRPORTTO>

<CITYTO>NEW YORK</CITYTO>

<DEPTIME>08:30:00</DEPTIME>

<ARRTIME>09:50:00</ARRTIME>

<ARRDATE>1995-02-28</ARRDATE>

<PRICE>849.0</PRICE>

<CURR>DEM</CURR>

<CURR_ISO>DEM</CURR_ISO>

</BAPISFLDAT>

</FLIGHT_LIST>

</asx:values>

</asx:abap>[/code]

XSL code to convert xml to html table.

[code]<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="header">

<tr bgcolor="white">

<xsl:for-each select="//BAPISFLDAT[1]/*">

<td><xsl:value-of select="local-name()"/></td>

</xsl:for-each>

</tr>

</xsl:variable>

<xsl:template match="/">

<table bgcolor="gold" border="1">

<xsl:copy-of select="$header" />

<xsl:apply-templates />

</table>

</xsl:template>

<xsl:template match="BAPISFLDAT">

<tr bgcolor="silver">

<xsl:apply-templates />

</tr>

</xsl:template>

<xsl:template match="BAPISFLDAT/*">

<td>

<xsl:value-of select="." />

</td>

</xsl:template>

</xsl:stylesheet>[/code]

Hope this helps.

Regards

Raja

Former Member
0 Kudos

...found a nice link in what appears to be Polish; even though I don't speak that language the ABAP and XSLT code can be understood:

http://www.jurecek.net/abap/call_transformation.php