Avatar billede oddi Nybegynder
07. marts 2009 - 17:14 Der er 5 kommentarer og
1 løsning

Hente XML fra en anden side og pasre XML filen

Hej Eksperter.

Jeg vil hente f.eks dagens valuta kurser fra: http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml

Jeg laver følgende:

<html>
<head>
<script type="text/javascript">
function parseXML()
{
    try //Internet Explorer
  {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
    catch(e)
  {
      try //Firefox, Mozilla, Opera, etc.
    {
        xmlDoc=document.implementation.createDocument("","",null);
    }
      catch(e)
    {
        alert(e.message);
        return;
    }
    }
    xmlDoc.async=false;
    xmlDoc.load("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
    document.getElementById("cur").innerHTML=xmlDoc.getElementsByTagName("currency")[0].childNodes[0].nodeValue;
   
}
</script>
<body onload="parseXML()">
<h1>Valuta</h1><br />
<p>Foerste element = <span id="cur"></span><p>
</body>
</head>
</html>
 
Det ser ikke ud somom det virker... Det skal dog siges at jeg er ny i javasript!

Den kode som jeg bruger har jeg fundet på: http://www.w3schools.com
Men på denne side står der også at "moderne" browsere ikke tillader at hente xml filer fra andre domainer... Hvordan skal jeg gribe dette an? Gør man dette måske på en helt anden måde?

Mvh Oddi
Avatar billede arne_v Ekspert
07. marts 2009 - 17:51 #1
En mulighed var at hente og formatere server side fremfor client side.
Avatar billede olebole Juniormester
07. marts 2009 - 17:58 #2
<ole>

Prøv det her:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript">
function parseXML()
{
    try //Internet Explorer
  {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
    catch(e)
  {
      try //Firefox, Mozilla, Opera, etc.
    {
        xmlDoc=document.implementation.createDocument("","",null);
    }
      catch(e)
    {
        alert(e.message);
        return;
    }
    }
    xmlDoc.async=false;
    xmlDoc.load("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
    var oCur = xmlDoc.getElementsByTagName("currency")[0];
    document.getElementById("cur").firstChild.nodeValue = oCur.getAttribute("code")+" :: "+ oCur.getAttribute("desc")+" :: "+ oCur.getAttribute("rate");
}
</script>
</head>
<body onload="parseXML()">
<h1>Valuta</h1><br />
<p>Foerste element = <span id="cur">&nbsp;</span><p>
</body>
</head>
</html>

/mvh
</bole>
Avatar billede oddi Nybegynder
07. marts 2009 - 23:18 #3
ole: Jeg kan ikke få det til at virke, virker det hos dig?
Avatar billede olebole Juniormester
08. marts 2009 - 17:48 #4
Doohhh ... sorry, my bad! Ja, det virker i IE, men ikke i Firefox.

Skal du hente XML fra et et andet domæne i Firefox - og ikke har adgang til at ændre i XML-dokumentet - må du bruge din egen server som proxy. Du sender en XMLHttpRequest til din egen server, som så henter XML'en fra Nationalbanken og sender den tilbage til browseren.

Hvis din server understøtter PHP, kan du skrive et dokument 'currency.php', som ser sådan ud:

<?php
function getAllCurrencies() {
    return @file_get_contents("http://www.nationalbanken.dk/dndk/valuta.nsf/valuta.xml");
}

$error = $xml = false;

if (isset($_POST["contxt"])) {
    switch ($_POST["contxt"]) {
        case "getAllCurrencies":
            $xml = getAllCurrencies();
            if (!$xml || $xml=="") $error = "Unable to retrieve XML from remote site.";
        break;
        default:
            $error = "Unknown ContextID: '".$_POST["contxt"]."'.";
    }
}
else $error = "No ContextID supplied.";

if ($error) {
    $xml = "<?xml version='1.0' encoding='utf-8'?>";
    $xml .= "<data><error>".$error."</error></data>";
}

header("Content-Length: ".strlen($xml));
header("Content-Type: text/xml; charset=utf-8");

print $xml;
?>

Du kan så kalde denne fil med et HTML-dokument, der ser sådan ud:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript">
/* XMLHttpRequest wrapper - http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php */
(function(){if(window.XMLHttpRequest)return;var o=null,s,a=["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}window.XMLHttpRequest=o?function(){return new ActiveXObject(s)}:null;o=null})();

function getXML() {
    var oHttp = new XMLHttpRequest();
    oHttp.open("post", "currency.php", true);
    oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = function(){
        if (oHttp.readyState<4) return;
        parseXML(oHttp.responseXML);
        oHttp = null;
    };
    oHttp.send("contxt=getAllCurrencies");
}
function parseXML(oXML) {
    var aErrors = oXML.getElementsByTagName("error");
    if (aErrors.length>0) return alert(aErrors[0].firstChild.nodeValue);
   
    var oCur = oXML.getElementsByTagName("currency")[0];
    document.getElementById("cur").firstChild.nodeValue = oCur.getAttribute("code")+" :: "+ oCur.getAttribute("desc")+" :: "+ oCur.getAttribute("rate");
}
window.onload = getXML;
</script>
</head>
<body>

<h1>Valuta</h1><br />
<p>Foerste element = <span id="cur">&nbsp;</span><p>

</body>
</head>
</html>
Avatar billede oddi Nybegynder
08. april 2009 - 00:10 #5
Tak for hjælpen olebole, jeg har desværre ikke haft tid til at kigge på det, men den tid kommer nok. Smid et svar.
Avatar billede olebole Juniormester
08. april 2009 - 00:44 #6
Selvtak  =)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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