Hej,
Jag har en extern XML-fil som jag vill ta lite realtidsinfo från.
Hur gör man detta på enklase sätt. Det vore bra med exempelvis ett javascript.
Tack på förhand!
15 svar · 1 295 visningar · startad av Xeonz
Hej,
Jag har en extern XML-fil som jag vill ta lite realtidsinfo från.
Hur gör man detta på enklase sätt. Det vore bra med exempelvis ett javascript.
Tack på förhand!
Den externa xmlfilen har ingen ändelse som är .xml utan CuQuotes.aspx?ISIN=SE00012345
Är det därför det inte fungerar för mig?
Har testat plocka ut detta: Gör jag rätt?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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.exempel.se/CuQuotes.aspx?ISIN=SE00012345");
document.getElementById("AskPrice").innerHTML=xmlDoc.getElementsByTagName("AskPrice")[0].childNodes[0].nodeValue;
document.getElementById("LatestQuote").innerHTML=xmlDoc.getElementsByTagName("LatestQuote")[0].childNodes[0].nodeValue;
document.getElementById("Closing").innerHTML=xmlDoc.getElementsByTagName("Closing")[0].childNodes[0].nodeValue;
}
</script>
</head>
<body onload="parseXML()">
<h1>W3Schools Internal Note</h1>
<p><b>Aktie:</b> <span id="AskPrice"></span><br />
<b>Senast:</b> <span id="LatestQuote"></span><br />
<b>Vid stängning:</b> <span id="Closing"></span>
</p>
</body>
</html>
XML-filen ser ut så här:
<Instrument ISIN="SE0001234">
<InstrumentID>SE0001234</InstrumentID>
<Ticker>XTRA</Ticker>
<NumberOfStocks>1000</NumberOfStocks>
<TradingLot>1 000</TradingLot>
−
<Prices>
<AskVolume>1100 000</AskVolume>
<AskPrice>5</AskPrice>
<BidVolume>30 000</BidVolume>
<BidPrice>1</BidPrice>
<LatestQuote>1</LatestQuote>
<NextToLastQuote>1</NextToLastQuote>
<QuoteDate>2008-12-10</QuoteDate>
<NoOfTrades>0</NoOfTrades>
<TotalTradedValue>0,00</TotalTradedValue>
<TotalTradedVolume>0</TotalTradedVolume>
<High>0,00</High>
<Low>0,00</Low>
<Closing>1</Closing>
<ClosingBestBid>1</ClosingBestBid>
<Opening>0,00</Opening>
<FirstTradingDateThisYear>2008-01-02</FirstTradingDateThisYear>
<PriceOnFirstTradingDateThisYear>1</PriceOnFirstTradingDateThisYear>
<DiffSinceFirstTradingDateThisYear>-1</DiffSinceFirstTradingDateThisYear>
<DiffSinceFirstTradingDateThisYearInPercent>-1 %</DiffSinceFirstTradingDateThisYearInPercent>
</Prices>
−
<FormatHelp>
<Currency>SEK</Currency>
<NumberDecimalSeparator>,</NumberDecimalSeparator>
<NumberGroupSeparator> </NumberGroupSeparator>
<CurrentCultureName>sv-SE</CurrentCultureName>
<LCID>10</LCID>
<ShortDatePattern>yyyy-MM-dd</ShortDatePattern>
</FormatHelp>
−
<FieldDescriptions>
<Closing>Last recorded price on previous trading day</Closing>
<ClosingBestBid>Last recorded best bid on previous trading day</ClosingBestBid>
<Opening>Opening price (first recorded trade) today</Opening>
</FieldDescriptions>
</Instrument>
På vilket sätt fungerar det inte?
Kan det möjligtvis vara så att CuQuotes.aspx?ISIN=SE00012345 inte genererar ett korrekt XML-dokument?
http://www.w3schools.com/Xml/xml_parser.asp säger att
load() läser in ett xml-dokument medan loadXml() läser in en string som då lämpligtvis kan göras om till XML. ("Note: The loadXML() method is used for loading strings (text), load() is used for loading files.")
Kan det nu vara så att din server inte returnerar korrekt content-type, typ text/xml?
Dvs vad returnerar CuQuotes.aspx?ISIN=SE00012345 ?
Om den returnerar ett XML-dokument, så måste du antagligen generera ett passande header-kod Typ:
(pseudokod):
response.ContentType="text/xml"
skrivUtInnehålletIXMLFilen("foo.xml");
exit();
Under länken http://www.exempel.se/CuQuotes.aspx?ISIN=SE00012345 kommer man direkt in på XML-filen.
Hur skriver man in detta i koden korrekt?:
(pseudokod):
response.ContentType="text/xml"
skrivUtInnehålletIXMLFilen("foo.xml");
exit();
Hmm, länken du angav verkar inte fungera (hos mig).
För att läsa in innehållet ur en fil:
http://www.w3schools.com/asp/met_readall.asp
<%
set t=fs.OpenTextFile("c:\sökväg\till\XML-filen.xml",1,false)
x=t.ReadAll
t.close
Response.SetContentType("text/xml")
Response.Write("The text in the file is: " & x)
%>
Pröva detta. Se till att efter Respons.Write(..) så får du inte skriva ut NÅNTING, inte ens ett mellanslag så se till att du t ex inte har en tom rad före första <% och inte efter sista %>
Okej, den länken är bara ett exempel då jag inte får ge ut den riktiga länken.
Tack för hjälpen iaf.
Okej, dock så existerar exempel.se (därför undrade jag) :)
Se mitt tidigare inlägg...
Sen så är det aldrig fel med lite eget initiativ. Även om jag i princip aldrig använt asp så kunde jag ändå luska fram, hur man läser in en fil med asp genom att googla ;)
jme skrev:
Okej, dock så existerar exempel.se (därför undrade jag) :)
Se mitt tidigare inlägg...
Sen så är det aldrig fel med lite eget initiativ. Även om jag i princip aldrig använt asp så kunde jag ändå luska fram, hur man läser in en fil med asp genom att googla ;)
=)
Jo jag har försökt google på det men jag tycker att det borde finnas något enklare sätt att ta ut info från en XML. Sen har jag aldrig jobbat med XML tidigare.
Jag ska titta på detta nu under kvällen och återkommer när / om jag hittar en lösning. =)
körde parseXML i firebug och hittade...
[Exception... "Access to restricted URI denied" code: "1012" nsresult:
"0x805303f4 (NS_ERROR_DOM_BAD_URI)" location:
"aktie.html Line: 27"]
De måste vara URL den inte vill sammarbeta med?
Om du använder XmlHttpRequest med JavaScript så kan du bara hämta XML-dokument inom domän som sidan som anropar.
Troxy skrev:
Om du använder XmlHttpRequest med JavaScript så kan du bara hämta XML-dokument inom domän som sidan som anropar.
Aha, hur löser ,man detta på enklaste sätt då XMLfilen på den externa server ständigt uppdateras med ny info??
Lägg scriptet i en extern javascriptfil, och ladda den från samma server som XML-filen (kräver att du kan påverka servern du vill hämta filen från förstås ;) )
Alternativet är att göra något liknande som t.ex. jme tipsar om härovan och skriva t.ex. en ASP-sida (eller annan typ av "webbtjänst") på din server som agerar som en proxy (dvs som på serversidan hämtar filen via http från "långtbortinätet" och därefter returnerar resultatet som om det låg på din egen server), och låta Javascriptet hämta den därifrån.
Okej, jag får testa detta. Jag har tyvärr inte möjligheten att påverka servern där XML-filen ligger.
Hittade en annan lösning som verkar intressant med hjälp av CURL.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'http://www.exempel.se/CuQuotes.aspx?ISIN=SE00012345');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
Detta skriver ut allt i XML-filen. Men hur gör jag så att man plockar ut tex ett värde?
Hmm...
Om det är XML du hämtar, och använder PHP, behöver du inte gå över ån efter vatten - du kan ladda in XML-filen direkt i ett DOMDocument-objekt och använda DOM-metoder och/eller XPATH för att hämta ut de värden du vill åt ur DOM-trädet ;)
<?php
// Ladda in dokumentet
$url = "http://feeds.feedburner.com/xhtml-punkt-se"; // Adressen till ett Atom feed (XML-dokument)
$doc = new DOMDocument();
$doc->load($url);
// Hämta alla titlar via DOM
$titles = $doc->getElementsByTagName("title");
foreach($titles as $title)
{
echo($title->textContent );
echo ("<br />");
}
?>
Använd en liknande "snurra" som en include, eller anropa den (på din server) via Javascript... ;)
... men vill du vara "snäll" mot den server du hämtar XML-filen från, så lägger du också till cachening av XML-dokumentet och ser till att det inte hämtas oftare än absolut nödvändigt ;)
Helt underbart, det fungerar som smort! Detta var exakt det jag var ute efter. Tack!! :)
Stort tack alla som hjälpt till! God Jul och Gott nytt år! :)