Avatar billede jyde.dk Nybegynder
19. januar 2011 - 10:41 Der er 10 kommentarer og
1 løsning

Import af xml data

Hejsa

På nationalbankens hjemmeside findes en xml side med gældende satser for udvalgt valutatyper.
http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml

Jeg vil gerne kunne importere disse satser til en oracle tabel. Er der nogen der ved hvordan man griber dette an?

/p
Avatar billede teepee Nybegynder
19. januar 2011 - 12:50 #1
Du skriver ikke hvad du vil bruge dem til. Du kan f.eks. bare gemme dem i en CLOB.
Avatar billede jyde.dk Nybegynder
19. januar 2011 - 14:12 #2
Jeg skal bruge data til at opdatere andre tabeller osv.

jeg vil helst hvis jeg kunne få data fra xml'en ned i enkelte felter i en tabel.

feks i en lille simpel tabel med 2 felter ... currencu_code og rate

/peter
Avatar billede teepee Nybegynder
19. januar 2011 - 14:34 #3
Avatar billede arne_v Ekspert
19. januar 2011 - 16:56 #4
En oplagt mulighed hvis du er udvikler er at skrive et lille loader program som henter XML, parser den og gemmer som du vil have data gemt.
Avatar billede jyde.dk Nybegynder
19. januar 2011 - 22:12 #5
Hvis vi nu tager udgangspunkt i det link som teepee's henviser til på oracle forum....og siger at jeg indtil videre laver en hardcore DECLARE af xmltype (så skal jeg nok senere lave scriptet dynamisk så det læser fra nettet eller også lave et lille script som arne_v foreslår der henter xml filen)

... er der så nogen der kan komme med et forslag til INSERT koden ? det er nemli her jeg ikke er så stærk....

Altså

CREATE TABLE currency_tab
  (
  currency_code varchar2(10),
  currency_rate varchar2(10)
  );


DECLARE
  xmldoc xmltype := xmltype('
<?xml version="1.0" encoding="ISO-8859-1"?>
<exchangerates type="Valutakurser" author="Danmarks Nationalbank" refcur="DKK" refamt="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dailyrates id="2011-01-19">
<currency code="EUR" desc="Euro" rate="745,13" />
<currency code="USD" desc="Amerikanske dollars" rate="551,70" />
<currency code="GBP" desc="Britiske pund" rate="883,59" />
<currency code="SEK" desc="Svenske kroner" rate="83,42" />
<currency code="NOK" desc="Norske kroner" rate="95,21" />
<currency code="ISK" desc="Islandske kroner" rate="-" />
<currency code="CHF" desc="Schweiziske franc" rate="574,77" />
<currency code="CAD" desc="Canadiske dollars" rate="556,57" />
<currency code="JPY" desc="Japanske yen" rate="6,7220" />
<currency code="AUD" desc="Australske dollars" rate="555,03" />
<currency code="NZD" desc="New Zealandske dollars" rate="428,80" />
<currency code="LVL" desc="Lettiske lats" rate="1.060,08" />
<currency code="LTL" desc="Litauiske litas" rate="215,80" />
<currency code="PLN" desc="Polske zloty" rate="192,75" />
<currency code="CZK" desc="Tjekkiske koruna" rate="30,72" />
<currency code="HUF" desc="Ungarske forint" rate="2,735" />
<currency code="HKD" desc="Hongkong dollars" rate="70,93" />
<currency code="SGD" desc="Singapore dollars" rate="430,89" />
<currency code="ZAR" desc="Sydafrikanske rand" rate="79,10" />
<currency code="BGN" desc="Bulgarske lev" rate="380,98" />
<currency code="RON" desc="Rumænske lei" rate="174,93" />
<currency code="TRY" desc="Tyrkiske lira" rate="358,37" />
<currency code="KRW" desc="Sydkoreanske won" rate="0,4965" />
<currency code="HRK" desc="Kroatiske kuna" rate="100,81" />
<currency code="RUB" desc="Russiske rubel" rate="18,51" />
<currency code="THB" desc="Thailandske baht" rate="18,12" />
<currency code="MYR" desc="Malaysiske ringgit" rate="180,74" />
<currency code="PHP" desc="Filippinske peso" rate="12,47" />
<currency code="IDR" desc="Indonesiske rupiah" rate="0,0609" />
<currency code="CNY" desc="Kinesiske Yuan renminbi" rate="83,81" />
<currency code="BRL" desc="Brasilianske real" rate="330,54" />
<currency code="MXN" desc="Mexikanske peso" rate="45,92" />
<currency code="INR" desc="Indiske rupee" rate="12,15" />
<currency code="ILS" desc="Israelske shekel" rate="156,09" />
<currency code="SDR" desc="Special Drawing Rights" rate="858,73" />
</dailyrates>
</exchangerates>
');


BEGIN

  INSERT INTO currency_tab (currency_code, currency_rate)
    SELECT currency_code, rate
  FROM XMLTable(
  XMLNamespaces(......
  .....
  .....

END;
Avatar billede arne_v Ekspert
20. januar 2011 - 02:12 #6
Mit forslag til en loader skulle også gemme i tabellen.

Det vil kunne gøres i 20-30 linier kode.

Hvad kan du kode i? Java? C#?
Avatar billede jyde.dk Nybegynder
20. januar 2011 - 15:33 #7
Hejsa

Jeg havde håbet på at man kunne gøre det i SQL, således at jeg kan afvikle det fra oracle
Avatar billede arne_v Ekspert
21. januar 2011 - 02:07 #8
Det kan du sikkert også.

Men jeg gad ikke bruge dage på at løse noget som kan laves på 5-10 minutter.
Avatar billede e.oersted Nybegynder
22. januar 2011 - 13:20 #9
Her er en lille anonymous block der løser dit problem:

/*
CREATE TABLE currency_tab
  (
  currency_code varchar2(10),
  currency_rate varchar2(10)
  );
*/ 
DECLARE
      t_cc        currency_tab%ROWTYPE;
      l_xmltext    VARCHAR2 (4000) := '<?xml version="1.0" encoding="ISO-8859-1" ?>
            <exchangerates type="Valutakurser" author="Danmarks Nationalbank" refcur="DKK" refamt="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <dailyrates id="2011-01-21">
            <currency code="EUR" desc="Euro" rate="745,33" />
            <currency code="USD" desc="Amerikanske dollars" rate="551,24" />
            <currency code="GBP" desc="Britiske pund" rate="878,67" />
            <currency code="SEK" desc="Svenske kroner" rate="83,19" />
            <currency code="NOK" desc="Norske kroner" rate="94,44" />
            <currency code="ISK" desc="Islandske kroner" rate="-" />
            <currency code="CHF" desc="Schweiziske franc" rate="572,76" />
            <currency code="CAD" desc="Canadiske dollars" rate="553,12" />
            <currency code="JPY" desc="Japanske yen" rate="6,6625" />
            <currency code="AUD" desc="Australske dollars" rate="545,39" />
            <currency code="NZD" desc="New Zealandske dollars" rate="417,69" />
            <currency code="LVL" desc="Lettiske lats" rate="1.059,46" />
            <currency code="LTL" desc="Litauiske litas" rate="215,86" />
            <currency code="PLN" desc="Polske zloty" rate="192,35" />
            <currency code="CZK" desc="Tjekkiske koruna" rate="30,69" />
            <currency code="HUF" desc="Ungarske forint" rate="2,718" />
            <currency code="HKD" desc="Hongkong dollars" rate="70,78" />
            <currency code="SGD" desc="Singapore dollars" rate="429,26" />
            <currency code="ZAR" desc="Sydafrikanske rand" rate="77,22" />
            <currency code="BGN" desc="Bulgarske lev" rate="381,09" />
            <currency code="RON" desc="Rumænske lei" rate="174,85" />
            <currency code="TRY" desc="Tyrkiske lira" rate="349,77" />
            <currency code="KRW" desc="Sydkoreanske won" rate="0,4919" />
            <currency code="HRK" desc="Kroatiske kuna" rate="100,80" />
            <currency code="RUB" desc="Russiske rubel" rate="18,40" />
            <currency code="THB" desc="Thailandske baht" rate="17,96" />
            <currency code="MYR" desc="Malaysiske ringgit" rate="180,14" />
            <currency code="PHP" desc="Filippinske peso" rate="12,40" />
            <currency code="IDR" desc="Indonesiske rupiah" rate="0,0608" />
            <currency code="CNY" desc="Kinesiske Yuan renminbi" rate="83,73" />
            <currency code="BRL" desc="Brasilianske real" rate="329,72" />
            <currency code="MXN" desc="Mexikanske peso" rate="45,68" />
            <currency code="INR" desc="Indiske rupee" rate="12,08" />
            <currency code="ILS" desc="Israelske shekel" rate="151,75" />
            <currency code="SDR" desc="Special Drawing Rights" rate="857,24" />
            </dailyrates>
            </exchangerates>';
      l_xmlin      XMLTYPE;
      l_xmlout    XMLTYPE;
      l_clob      CLOB;
      l_dom        DBMS_XMLDOM.DOMDOCUMENT;
      Node        DBMS_XMLDOM.DOMELEMENT;
      NodeList    DBMS_XMLDOM.DOMNODELIST;
      AttrNode    DBMS_XMLDOM.DOMATTR;
      ListLen      NUMBER;
      n            NUMBER;
BEGIN
--      l_xmlout := webservicecall (l_xmlin, 'portname', 'operationname');
-- Ovenstående er koden der kalder en webservice og returnerer XML i l_xmlout.
-- l_xmlin er f.eks. din XML-request (hvis altså Nationalbanken stiller en webservice til rådighed - ellers må du fylde l_xmlin på anden vis)
      l_xmlout := xmltype(l_xmltext);
      l_clob := l_xmlout.getclobval ();
      l_dom := DBMS_XMLDOM.NEWDOMDOCUMENT (l_clob);
      NodeList :=
          DBMS_XMLDOM.GETELEMENTSBYTAGNAME (l_dom,'currency');
        ListLen := DBMS_XMLDOM.GETLENGTH (NodeList);
        IF ListLen > 0
        THEN
          FOR n IN 0 .. ListLen - 1
          LOOP
              Node :=
                DBMS_XMLDOM.MAKEELEMENT (DBMS_XMLDOM.ITEM (NodeList, n));

              AttrNode := DBMS_XMLDOM.GETATTRIBUTENODE(node,'code');
              t_cc.currency_code := DBMS_XMLDOM.GetValue (AttrNode);
              AttrNode := DBMS_XMLDOM.GETATTRIBUTENODE(node,'rate');
              t_cc.currency_rate := DBMS_XMLDOM.GetValue (AttrNode);
              INSERT INTO currency_tab
                VALUES  t_cc;
          END LOOP;
        END IF;

END;
Avatar billede jyde.dk Nybegynder
23. januar 2011 - 15:33 #10
Til Arne_v
Tak for dine input til tråden.

Til e.oersted
SUPER.. det var lige det jeg skulle bruge.. nu kan jeg komme videre .. TAK for hjælpen!!

/peter
Avatar billede jyde.dk Nybegynder
23. januar 2011 - 15:36 #11
Arhhh nu glemte jeg dig teepee... du skal også ha en tak, det var jo dit oplæg der startede løsningen op.

/p
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester