webForumDet fria alternativet

Ladda XML till HTML

15 svar · 1 295 visningar · startad av Xeonz

XeonzMedlem sedan feb. 200638 inlägg
#1

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!

PeddaMedlem sedan juni 20006 032 inlägg
XeonzMedlem sedan feb. 200638 inlägg
#3

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>

jmeMedlem sedan maj 20012 237 inlägg
#4

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();

XeonzMedlem sedan feb. 200638 inlägg
#5

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();

jmeMedlem sedan maj 20012 237 inlägg
#6

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 %>

XeonzMedlem sedan feb. 200638 inlägg
#7

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.

jmeMedlem sedan maj 20012 237 inlägg
#8

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 ;)

XeonzMedlem sedan feb. 200638 inlägg
#9

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. =)

XeonzMedlem sedan feb. 200638 inlägg
#10

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?

TroxyMedlem sedan mars 20041 505 inlägg
#11

Om du använder XmlHttpRequest med JavaScript så kan du bara hämta XML-dokument inom domän som sidan som anropar.

XeonzMedlem sedan feb. 200638 inlägg
#12

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??

jarvkloMedlem sedan juli 20013 378 inlägg
#13

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.

XeonzMedlem sedan feb. 200638 inlägg
#14

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?

jarvkloMedlem sedan juli 20013 378 inlägg
#15

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 ;)

XeonzMedlem sedan feb. 200638 inlägg
#16

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! :)

134 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)