on 06-03-2005 7:44 AM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
...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:
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
88 | |
10 | |
10 | |
9 | |
6 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.