Following the example of downloading exchange rates from Central Bank Of Turkey using transformations, please find bellow the same way for National Bank of Poland.
Again, lets create an RFC destination (lets call it here Z_DESTINATION_TO_NBP) tha will point to https://www.nbp.pl/kursy/xml/lasta.xml, where the last exchange rates are posted.
The XML behind has following structure:
<?xml version="1.0" encoding="ISO-8859-2"?>
<tabela_kursow typ="A" uid="20a067">
<numer_tabeli>067/A/NBP/2020</numer_tabeli>
<data_publikacji>2020-04-06</data_publikacji>
<pozycja>
<nazwa_waluty>bat (Tajlandia)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>THB</kod_waluty>
<kurs_sredni>0,1285</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>dolar amerykański</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>USD</kod_waluty>
<kurs_sredni>4,2257</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>dolar australijski</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>AUD</kod_waluty>
<kurs_sredni>2,5614</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>dolar Hongkongu</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>HKD</kod_waluty>
<kurs_sredni>0,5451</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>dolar kanadyjski</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>CAD</kod_waluty>
<kurs_sredni>2,9916</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>dolar nowozelandzki</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>NZD</kod_waluty>
<kurs_sredni>2,5005</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>dolar singapurski</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>SGD</kod_waluty>
<kurs_sredni>2,9451</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>euro</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>EUR</kod_waluty>
<kurs_sredni>4,5612</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>forint (Węgry)</nazwa_waluty>
<przelicznik>100</przelicznik>
<kod_waluty>HUF</kod_waluty>
<kurs_sredni>1,2554</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>frank szwajcarski</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>CHF</kod_waluty>
<kurs_sredni>4,3199</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>funt szterling</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>GBP</kod_waluty>
<kurs_sredni>5,2030</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>hrywna (Ukraina)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>UAH</kod_waluty>
<kurs_sredni>0,1551</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>jen (Japonia)</nazwa_waluty>
<przelicznik>100</przelicznik>
<kod_waluty>JPY</kod_waluty>
<kurs_sredni>3,8703</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>korona czeska</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>CZK</kod_waluty>
<kurs_sredni>0,1648</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>korona duńska</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>DKK</kod_waluty>
<kurs_sredni>0,6107</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>korona islandzka</nazwa_waluty>
<przelicznik>100</przelicznik>
<kod_waluty>ISK</kod_waluty>
<kurs_sredni>2,9332</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>korona norweska</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>NOK</kod_waluty>
<kurs_sredni>0,4026</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>korona szwedzka</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>SEK</kod_waluty>
<kurs_sredni>0,4153</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>kuna (Chorwacja)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>HRK</kod_waluty>
<kurs_sredni>0,5982</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>lej rumuński</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>RON</kod_waluty>
<kurs_sredni>0,9443</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>lew (Bułgaria)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>BGN</kod_waluty>
<kurs_sredni>2,3321</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>lira turecka</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>TRY</kod_waluty>
<kurs_sredni>0,6232</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>nowy izraelski szekel</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>ILS</kod_waluty>
<kurs_sredni>1,1652</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>peso chilijskie</nazwa_waluty>
<przelicznik>100</przelicznik>
<kod_waluty>CLP</kod_waluty>
<kurs_sredni>0,4882</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>peso filipińskie</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>PHP</kod_waluty>
<kurs_sredni>0,0833</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>peso meksykańskie</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>MXN</kod_waluty>
<kurs_sredni>0,1673</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>rand (Republika Południowej Afryki)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>ZAR</kod_waluty>
<kurs_sredni>0,2223</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>real (Brazylia)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>BRL</kod_waluty>
<kurs_sredni>0,7898</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>ringgit (Malezja)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>MYR</kod_waluty>
<kurs_sredni>0,9673</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>rubel rosyjski</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>RUB</kod_waluty>
<kurs_sredni>0,0553</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>rupia indonezyjska</nazwa_waluty>
<przelicznik>10000</przelicznik>
<kod_waluty>IDR</kod_waluty>
<kurs_sredni>2,5747</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>rupia indyjska</nazwa_waluty>
<przelicznik>100</przelicznik>
<kod_waluty>INR</kod_waluty>
<kurs_sredni>5,5550</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>won południowokoreański</nazwa_waluty>
<przelicznik>100</przelicznik>
<kod_waluty>KRW</kod_waluty>
<kurs_sredni>0,3437</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>yuan renminbi (Chiny)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>CNY</kod_waluty>
<kurs_sredni>0,5956</kurs_sredni>
</pozycja>
<pozycja>
<nazwa_waluty>SDR (MFW)</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>XDR</kod_waluty>
<kurs_sredni>5,7448</kurs_sredni>
</pozycja>
</tabela_kursow>
Again I've choosen the XSLT transformation, the code of it (Z_NBP_TRANSFORMATION) you can find bellow.
<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>
<EXCHANGE_RATES>
<IMPORT_FILE>
<xsl:for-each select="/tabela_kursow">
<TYPE>
<xsl:value-of select="@typ"/>
</TYPE>
<UID>
<xsl:value-of select="@uid"/>
</UID>
<TABLE_NUMBER>
<xsl:value-of select="numer_tabeli"/>
</TABLE_NUMBER>
<DATE_OF_PUBLISHING>
<xsl:value-of select="data_publikacji"/>
</DATE_OF_PUBLISHING>
<CURRENCIES>
<xsl:for-each select="/tabela_kursow/pozycja">
<CURRENCY>
<CURRENCY_NAME>
<xsl:value-of select="nazwa_waluty"/>
</CURRENCY_NAME>
<UNIT>
<xsl:value-of select="przelicznik"/>
</UNIT>
<CURRENCY_CODE>
<xsl:value-of select="kod_waluty"/>
</CURRENCY_CODE>
<EXCHANGE_RATE>
<xsl:value-of select="kurs_sredni"/>
</EXCHANGE_RATE>
</CURRENCY>
</xsl:for-each>
</CURRENCIES>
</xsl:for-each>
</IMPORT_FILE>
</EXCHANGE_RATES>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>
To download the XML file and to call transformation, you can use following dirty ABAP code. The structure of the XML will be transformed into internal table of a type EXCHANGE_RATES.
PUBLIC SECTION.
TYPES: BEGIN OF currency,
currency_name TYPE string,
unit TYPE string,
currency_code TYPE string,
exchange_rate TYPE string,
END OF currency,
BEGIN OF exchange_rate,
type TYPE string,
uid TYPE string,
table_number TYPE string,
date_of_publishing TYPE string,
currencies TYPE STANDARD TABLE OF currency WITH DEFAULT KEY,
END OF exchange_rate,
exchange_rates TYPE STANDARD TABLE OF exchange_rate WITH DEFAULT KEY.
METHODS: get_exchange_rates RETURNING VALUE(exchange_rates) TYPE exchange_rates.
PRIVATE SECTION.
DATA: xml TYPE string.
METHODS: get_xml_from_bank.
METHODS: transform_xml_to_table RETURNING VALUE(exchange_rates) TYPE exchange_rates.
ENDCLASS.
CLASS lcl_exchange_rates IMPLEMENTATION.
METHOD get_xml_from_bank.
cl_http_client=>create_by_destination(
EXPORTING
destination = 'Z_DESTINATION_TO_NBP'
IMPORTING
client = DATA(client)
EXCEPTIONS
argument_not_found = 1
destination_not_found = 2
destination_no_authority = 3
plugin_not_active = 4
internal_error = 5
OTHERS = 6
).
IF sy-subrc EQ 0.
client->request->set_method( if_http_request=>co_request_method_get ).
client->send( EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
http_invalid_timeout = 4
OTHERS = 5
).
IF sy-subrc EQ 0.
client->receive(
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3
OTHERS = 4 ).
IF sy-subrc EQ 0.
xml = client->response->get_cdata( ).
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD transform_xml_to_table.
CALL TRANSFORMATION z_nbp_transformation
SOURCE XML xml
RESULT exchange_rates = exchange_rates.
ENDMETHOD.
METHOD get_exchange_rates.
get_xml_from_bank( ).
exchange_rates = transform_xml_to_table( ).
ENDMETHOD.
ENDCLASS.
Now again you can use BAPI_EXCHANGERATE_CREATE to store the exchange rates in your system.