2007

Okt

20

Av

Internet verkar vara en i det närmaste outtömlig källa av diverse information, i många fall helt ovärderlig. Valutakurser är en sådan information. De har den egenheten att de så gott som dagligen ändras beroende på marknaden. Ett ställe där dagens valutakurser kan hittas är på den europeiska centralbankens hemsida, www.ecb.int, där det också, mycket föredömligt, finns ett XML-flöde med dagens valutakurser. Denna kan läsas in i FileMaker och användas i ditt eget system för omvandling av valutakurser. 

FileMaker kan ju som bekant importera XML-filer, dessa kan också finnas på webben. I tidigare exempel har jag visat att man kan läsa in valresultat (se Importera XML med XSLT). Det som skiljer är helt enkelt en annan XSLT och givetvis en annan databas. Tanken är att läsa in alla valutakurser i en post, en kurs i varje fält. Detta för att kunna spara historisk information, en post per dag.

Du hittar XML-filen på http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml och en XSLT för att importera den i FileMaker kan se ut så här:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns="http://www.filemaker.com/fmpxmlresult">

<xsl:template match="/">
  <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
    <ERRORCODE>0</ERRORCODE>
    <PRODUCT BUILD="" NAME="" VERSION=""/>
    <DATABASE DATEFORMAT="yyyy-MM-dd" LAYOUT="" 
      NAME="" RECORDS="{count(/*/*[3]/* )}" TIMEFORMAT="hh:mm:ss"/>
    <xsl:call-template name="METADATA"/>
  </FMPXMLRESULT>
</xsl:template>

<xsl:template name="METADATA" match="/*/*[3]/*[1]/*"> 
  <METADATA>
    <FIELD EMPTYOK="NO" MAXREPEAT="1" NAME="Date" TYPE="DATE"/>
    <xsl:for-each select="/*/*/*[1]/*/@currency">
      <FIELD>
        <xsl:attribute name="EMPTYOK">YES</xsl:attribute>
        <xsl:attribute name="MAXREPEAT">1</xsl:attribute>
        <xsl:attribute name="NAME">
            <xsl:value-of select="."/></xsl:attribute>
        <xsl:attribute name="TYPE">NUMBER</xsl:attribute>
      </FIELD>
    </xsl:for-each>
  </METADATA>
  <xsl:call-template name="RESULTSET"/>
</xsl:template>

<xsl:template name="RESULTSET" match="/*/*[3]/*">
  <RESULTSET>
    <xsl:attribute name="FOUND">
      <xsl:value-of select="count(/*/*[3]/*)" /></xsl:attribute>
    <xsl:for-each select="*/*[3]/*">
      <ROW>
        <xsl:attribute name="MODID">0</xsl:attribute>
        <xsl:attribute name="RECORDID">
          <xsl:value-of select="position()"/></xsl:attribute>
        <COL>
          <DATA>
            <xsl:value-of select="@time"/>
          </DATA>
        </COL>
        <xsl:for-each select="*/@rate">
          <COL>
            <DATA>
              <xsl:value-of select="translate(.,',.','.,')"/>
            </DATA>
          </COL>
        </xsl:for-each> 
      </ROW>
    </xsl:for-each>
  </RESULTSET>
</xsl:template>

</xsl:stylesheet>

Du kan ladda ner XSLT-filen här.

Sen är det bara att välja att importera från XML-källa, ange web-adressen för XML-filen och XSLT-filen för formateringen.

December 2009: Artikeln är översatt till tyska och publicerad i tyska FileMaker Magazin nr 5/2009. Du kan läsa hela artikeln här: FMM_200905_32-34.pdf (1,31 mb)

Skriv en kommentar

  • (will not be published)
  • × 5 = fifteen

Läs också: