8 Replies Latest reply on Jun 14, 2016 1:28 AM by user19752

    XSLT for XML encoded ISO-8859-2 data import to FM database

    tomwitom

      Hi, please let me know if anyone of you solved  an issue I encountered when creating XSLT for data import from external source (Central Bank) that gives everyday exchange rates in the form of XML, but unfortunately with ISO-8859-2 encoding? XML and XSLT are not my strongest points, but I learn and whatever I try, ends in immediate parser response that the encoding of input XML is not supported. Please help!!!

        • 1. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
          beverly

          can you post the first few lines of the XML and the XSLT? and can you post error dialogs, if any, you get? or if no error dialog what "issue" are you having?

          beverly

          • 2. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
            beverly

            Also this help

            states

            FileMaker Pro uses the Xerces-C++ XML parser, which supports XML data in the following character encodings:

             

            ASCII

            UTF-8

            UTF-16 (Big/Small Endian)

            UCS4 (Big/Small Endian)

            EBCDIC in both IBM037 and IBM1140 encodings

            ISO-8859-1 (Latin1)

            Windows-1252

            • 3. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
              tomwitom

              Hi Beverly, thanks for prompt response.

              Input XML is:

              <?xml version="1.0" encoding="ISO-8859-2"?>

              <tabela_kursow typ="C" uid="16c107">

                 <numer_tabeli>107/C/NBP/2016</numer_tabeli>

                 <data_notowania>2016-06-03</data_notowania>

                 <data_publikacji>2016-06-06</data_publikacji>

                 <pozycja>

                    <nazwa_waluty>dolar amerykański</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>USD</kod_waluty>

                    <kurs_kupna>3,8321</kurs_kupna>

                    <kurs_sprzedazy>3,9095</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>dolar australijski</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>AUD</kod_waluty>

                    <kurs_kupna>2,8134</kurs_kupna>

                    <kurs_sprzedazy>2,8702</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>dolar kanadyjski</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>CAD</kod_waluty>

                    <kurs_kupna>2,9651</kurs_kupna>

                    <kurs_sprzedazy>3,0251</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>euro</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>EUR</kod_waluty>

                    <kurs_kupna>4,3434</kurs_kupna>

                    <kurs_sprzedazy>4,4312</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>forint (Węgry)</nazwa_waluty>

                    <przelicznik>100</przelicznik>

                    <kod_waluty>HUF</kod_waluty>

                    <kurs_kupna>1,3912</kurs_kupna>

                    <kurs_sprzedazy>1,4194</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>frank szwajcarski</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>CHF</kod_waluty>

                    <kurs_kupna>3,9217</kurs_kupna>

                    <kurs_sprzedazy>4,0009</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>funt szterling</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>GBP</kod_waluty>

                    <kurs_kupna>5,5817</kurs_kupna>

                    <kurs_sprzedazy>5,6945</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>jen (Japonia)</nazwa_waluty>

                    <przelicznik>100</przelicznik>

                    <kod_waluty>JPY</kod_waluty>

                    <kurs_kupna>3,5806</kurs_kupna>

                    <kurs_sprzedazy>3,6530</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>korona czeska</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>CZK</kod_waluty>

                    <kurs_kupna>0,1608</kurs_kupna>

                    <kurs_sprzedazy>0,1640</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>korona duńska</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>DKK</kod_waluty>

                    <kurs_kupna>0,5838</kurs_kupna>

                    <kurs_sprzedazy>0,5956</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>korona norweska</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>NOK</kod_waluty>

                    <kurs_kupna>0,4683</kurs_kupna>

                    <kurs_sprzedazy>0,4777</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>korona szwedzka</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>SEK</kod_waluty>

                    <kurs_kupna>0,4696</kurs_kupna>

                    <kurs_sprzedazy>0,4790</kurs_sprzedazy>

                 </pozycja>

                 <pozycja>

                    <nazwa_waluty>SDR (MFW)</nazwa_waluty>

                    <przelicznik>1</przelicznik>

                    <kod_waluty>XDR</kod_waluty>

                    <kurs_kupna>5,4603</kurs_kupna>

                    <kurs_sprzedazy>5,5707</kurs_sprzedazy>

                 </pozycja>

              </tabela_kursow>

               

              My so far trial step in getting to XSLT is:

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

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

              <xsl:template match=“/”>

              <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">

              <DATABASE DATEFORMAT="D/m/yyyy"/>

              <METADATA>

              <FIELD NAME="nr_tabeli_C” TYPE="TEXT"/>

              <FIELD NAME="data_publikacji" TYPE="DATE"/>

              <FIELD NAME="USDkupno" TYPE="NUMBER"/>

              <FIELD NAME="USDsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="AUDkupno" TYPE="NUMBER"/>

              <FIELD NAME="AUDsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="CADkupno" TYPE="NUMBER"/>

              <FIELD NAME="CADsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="EURkupno" TYPE="NUMBER"/>

              <FIELD NAME="EURsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="HUFkupno100" TYPE="NUMBER"/>

              <FIELD NAME="HUFsprzedaz100" TYPE="NUMBER"/>

              <FIELD NAME="CHFkupno" TYPE="NUMBER"/>

              <FIELD NAME="CHFsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="CZKkupno" TYPE="NUMBER"/>

              <FIELD NAME="CZKsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="DKKkupno" TYPE="NUMBER"/>

              <FIELD NAME="DKKsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="GBPkupno" TYPE="NUMBER"/>

              <FIELD NAME="GBPsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="JPYkupno100" TYPE="NUMBER"/>

              <FIELD NAME="JPYsprzedaz100" TYPE="NUMBER"/>

              <FIELD NAME="NOKkupno" TYPE="NUMBER"/>

              <FIELD NAME="NOKsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="SEKkupno" TYPE="NUMBER"/>

              <FIELD NAME="SEKsprzedaz" TYPE="NUMBER"/>

              <FIELD NAME="XDRkupno" TYPE="NUMBER"/>

              <FIELD NAME="XDRsprzedaz" TYPE="NUMBER"/>

              </METADATA>

              <RESULTSET>

              <ROW>

              <COL>

              <DATA>bla bla bla</DATA>

              </COL>

              <COL>

              <DATA>2016-06-03</DATA>

              </COL>

              <COL>

              <DATA><222222222</DATA>

              </COL>

              <COL>

              <DATA>3.9716</DATA>

              </COL>

              <COL>

              <DATA>2.8121</DATA>

              </COL>

              <COL>

              <DATA>2.8689</DATA>

              </COL>

              <COL>

              <DATA>2.9698</DATA>

              </COL>

              <COL>

              <DATA>3.0298</DATA>

              </COL>

              <COL>

              <DATA>4.3455</DATA>

              </COL>

              <COL>

              <DATA>4.4333</DATA>

              </COL>

              <COL>

              <DATA>1.3885</DATA>

              </COL>

              <COL>

              <DATA>1.4165</DATA>

              </COL>

              <COL>

              <DATA>3.9346</DATA>

              </COL>

              <COL>

              <DATA>4.0140</DATA>

              </COL>

              <COL>

              <DATA>0.1608</DATA>

              </COL>

              <COL>

              <DATA>0.1640</DATA>

              </COL>

              <COL>

              <DATA>0.5842</DATA>

              </COL>

              <COL>

              <DATA>0.5960</DATA>

              </COL>

              <COL>

              <DATA>5.6227</DATA>

              </COL>

              <COL>

              <DATA>5.7363</DATA>

              </COL>

              <COL>

              <DATA>3.5850</DATA>

              </COL>

              <COL>

              <DATA>3.6574</DATA>

              </COL>

              <COL>

              <DATA>.4658</DATA>

              </COL>

              <COL>

              <DATA>0.47520</DATA>

              </COL>

              <COL>

              <DATA>0.4675</DATA>

              </COL>

              <COL>

              <DATA>0.4769</DATA>

              </COL>

              <COL>

              <DATA>5.4570</DATA>

              </COL>

              <COL>

              <DATA>5.5672</DATA>

              </COL>

              </ROW>

              </RESULTSET>

              </FMPXMLRESULT>

              </xsl:template>

              </xsl:stylesheet>

              • 4. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
                tomwitom

                Yes, I know this, but hoped there is a way to tell the parser to read the ISO-8859-2 as UTF-8 since in needed fragments no funny letters are used, only date and numbers.

                • 5. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
                  beverly

                  You do not specify an xsl:output which is where you may be able to change the encoding.

                   

                  You'd have to experiment (perhaps with a temporary table?)

                  beverly

                  • 6. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
                    user19752

                    So edit the encoding= line of input file to UTF-8 then can you import it?

                    • 7. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
                      monkeybreadsoftware

                      You can use Text.ReadTextFile in MBS Plugin and specify encoding as "8859-2". Than you have it in a variable.

                      You can do substitute to replace encoding="ISO-8859-2" with encoding="UTF-8" and use Text.WriteTextFile function to write the xml file back to disk, now with UTF-8 as encoding.

                      Now it should work fine in FileMaker with UTF-8.

                      • 8. Re: XSLT for XML encoded ISO-8859-2 data import to FM database
                        user19752

                        Succeeded with local xml file.

                         

                        Set Variable [ $path; Value:"/C:/Users/19752/Documents/test/8859-2.xml" ]

                        Set Variable [ $pathxml; Value:"/C:/Users/19752/Documents/test/test.xml" ]

                        Set Variable [ $pathxsl; Value:"/C:/Users/19752/Documents/test/8859-2.xslt" ]

                        Insert from URL [ Globals::html; "file://" & $path ][ Do not automatically encode URL; Select; No dialog ]

                        Set Field [ Globals::xml; Let ( encoding = "ISO-8859-2" ;

                        Replace ( Globals::xml ; Position ( Globals::xml ; encoding ; 1 ; 1 ) ; Length ( encoding ) ; "UTF-16" ) ) ]

                        Commit Records/Requests[ No dialog ]

                        Export Field Contents [ Globals::xml; “$pathxml” ]

                        Import Records [ XML (from file): $pathxml; XSL (from file): $pathxsl; Target: “{New table}”; Method: Add; Character Set: “UTF-8” ]

                         

                        Changed your xslt partially as

                        <RESULTSET>

                        <ROW>

                        <COL>

                        <DATA><xsl:value-of select="//numer_tabeli" /></DATA>

                        </COL>

                        <COL>

                        <DATA><xsl:value-of select="//data_publikacji" /></DATA>

                        </COL>

                        <xsl:for-each select="//pozycja">

                        <COL>

                        <DATA><xsl:value-of select="./kurs_kupna[1]" /></DATA>

                        </COL>

                        <COL>

                        <DATA><xsl:value-of select="./kurs_sprzedazy[1]" /></DATA>

                        </COL>

                        </xsl:for-each>

                        </ROW>

                        </RESULTSET>